Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การส่งไฟล์แนบเป็นอีเมลโดยใช้ Python


ในการส่งอีเมลที่มีเนื้อหาผสมต้องตั้งค่า ประเภทเนื้อหา ส่วนหัวเป็น หลายส่วน/ผสม . จากนั้น สามารถระบุส่วนข้อความและไฟล์แนบภายในขอบเขต .

ขอบเขตเริ่มต้นด้วยยัติภังค์สองตัวตามด้วยหมายเลขเฉพาะ ซึ่งไม่สามารถปรากฏในส่วนข้อความของอีเมลได้ ขอบเขตสุดท้ายที่แสดงถึงส่วนสุดท้ายของอีเมลต้องลงท้ายด้วยยัติภังค์สองตัว

ไฟล์ที่แนบมาควรเข้ารหัสด้วย pack("m") ฟังก์ชันให้มีการเข้ารหัส base64 ก่อนส่ง

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างซึ่งส่งไฟล์ /tmp/test.txt เป็นสิ่งที่แนบมา ลองสักครั้ง −

#!/usr/bin/python
import smtplib
import base64
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) # base64
sender = '[email protected]'
reciever = '[email protected]'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body,marker)
# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s
%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3
try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"
except Exception:
   print "Error: unable to send email"