ในบทความนี้ เราจะมาดูกันว่าเราสามารถส่งอีเมลพร้อมไฟล์แนบโดยใช้ Python ได้อย่างไร ในการส่งจดหมาย เราไม่จำเป็นต้องมีห้องสมุดภายนอก มีโมดูลที่เรียกว่า SMTPlib ซึ่งมาพร้อมกับ Python ใช้ SMTP (Simple Mail Transfer Protocol) เพื่อส่งจดหมาย มันสร้างวัตถุเซสชันไคลเอนต์ SMTP สำหรับการส่งจดหมาย
SMTP ต้องการรหัสอีเมลต้นทางและปลายทางที่ถูกต้อง และหมายเลขพอร์ต หมายเลขพอร์ตแตกต่างกันไปตามไซต์ต่างๆ ตัวอย่างเช่น สำหรับ google พอร์ตคือ 587 .
ขั้นแรกเราต้องนำเข้าโมดูลเพื่อส่งจดหมาย
import smtplib
นอกจากนี้ เรายังใช้โมดูล MIME (Multipurpose Internet Mail Extension) เพื่อให้มีความยืดหยุ่นมากขึ้น การใช้ส่วนหัว MIME ทำให้เราจัดเก็บข้อมูลผู้ส่งและผู้รับ ตลอดจนรายละเอียดอื่นๆ ได้ จำเป็นต้องมี MIME เพื่อตั้งค่าไฟล์แนบกับอีเมล
เรากำลังใช้บริการ Gmail ของ Google เพื่อส่งอีเมล ดังนั้นเราจึงต้องการการตั้งค่าบางอย่าง (ถ้าจำเป็น) เพื่อความปลอดภัยของ Google หากไม่ได้ตั้งค่าเหล่านั้น รหัสต่อไปนี้อาจไม่ทำงาน หาก Google ไม่รองรับการเข้าถึงจากแอปของบุคคลที่สาม
เพื่อให้เข้าถึงได้ เราต้องตั้งค่า "การเข้าถึงแอปที่ปลอดภัยน้อยกว่า" ในบัญชี Google หากเปิดการยืนยันสองขั้นตอน เราจะใช้การเข้าถึงที่มีความปลอดภัยน้อยกว่าไม่ได้
ในการตั้งค่านี้ให้เสร็จสิ้น ให้ไปที่คอนโซลผู้ดูแลระบบของ Google และค้นหาการตั้งค่าแอปที่มีความปลอดภัยน้อย
ขั้นตอนในการส่งเมลพร้อมไฟล์แนบโดยใช้ SMTP (smtplib)
- สร้าง MIME
- เพิ่มผู้ส่ง ที่อยู่ผู้รับลงใน MIME
- เพิ่มชื่อเมลลงใน MIME
- แนบร่างกับ MIME
- เปิดไฟล์เป็นโหมดไบนารีซึ่งจะแนบไปกับเมล
- อ่านไบต์สตรีมและเข้ารหัสไฟล์แนบโดยใช้รูปแบบการเข้ารหัส base64
- เพิ่มส่วนหัวของไฟล์แนบ
- เริ่มเซสชัน SMTP ด้วยหมายเลขพอร์ตที่ถูกต้องพร้อมคุณสมบัติความปลอดภัยที่เหมาะสม
- เข้าสู่ระบบ
- ส่งจดหมายและออก
โค้ดตัวอย่าง
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders mail_content = '''Hello, This is a test mail. In this mail we are sending some attachments. The mail is sent using Python SMTP library. Thank You ''' #The mail addresses and password sender_address = '[email protected]' sender_pass = 'xxxxxxxx' receiver_address = '[email protected]' #Setup the MIME message = MIMEMultipart() message['From'] = sender_address message['To'] = receiver_address message['Subject'] = 'A test mail sent by Python. It has an attachment.' #The subject line #The body and the attachments for the mail message.attach(MIMEText(mail_content, 'plain')) attach_file_name = 'TP_python_prev.pdf' attach_file = open(attach_file_name, 'rb') # Open the file as binary mode payload = MIMEBase('application', 'octate-stream') payload.set_payload((attach_file).read()) encoders.encode_base64(payload) #encode the attachment #add payload header with filename payload.add_header('Content-Decomposition', 'attachment', filename=attach_file_name) message.attach(payload) #Create SMTP session for sending the mail session = smtplib.SMTP('smtp.gmail.com', 587) #use gmail with port session.starttls() #enable security session.login(sender_address, sender_pass) #login with mail_id and password text = message.as_string() session.sendmail(sender_address, receiver_address, text) session.quit() print('Mail Sent')
ผลลัพธ์
D:\Python TP\Python 450\linux>python 327.Send_Mail.py Mail Sent