16 พฤษภาคม 2558

Published 5/16/2558 by with 0 comment

ส่งอีเมลด้วยภาษา Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปส่งอีเมลด้วยภาษา Python กันครับ

ในการส่งอีเมลด้วยภาษา Python ผมจะขอกล่าวถึงการใช้งานสองไลบรารีดังนี้

  • ไลบรารี smtplib

  • ไลบรารี email


เนื่องจากทั้งสองไลบรารีมีคำสั่งปรีกย่อยจำนวนมากผมจึงขอนำเสนอเฉพาะคำสั่งที่ใช้งานบ่อย ๆ ในการส่งอีเมลด้วยภาษา Python ครับ

ไลบรารี smtplib


ไลบรารี smtplib เป็นไลบรารีสำหรับส่งอีเมลผ่าน SMTP ในการส่งอีเมลในภาษา Python เราต้องใช้ไลบรารีอีกอันร่วมด้วย คือ ไลบรารี email สำหรับใช้จัดการกับข้อมูลก่อนส่งอีเมลครับ

ในการใช้งานทุกครั้งต้อง

[python]import smtplib[/python]

เข้ามาทุกครั้งครับ

มีคำสั่งที่ควรรู้ดังนี้

[python]smtplib.SMTP('Host SMTP', port)[/python]

เป็นคำสั่งสำหรับสร้างวัตถุ SMTP จากการเชื่อมต่อ

[python]SMTP.set_debuglevel(level)[/python]

เป็นคำสั่งกำหนดค่าระดับ debug ของ output

[python]SMTP.login(user, password)[/python]

ล็อกอินเข้าสู่ระบบอีเมล

[python]SMTP.verify(address)[/python]

ยืนยันอีเมล

[python]SMTP.ehlo(name='')[/python]

ระบุตัวเองไปยังเซิร์ฟเวอร์ ESMTP โดย EHLO

[python]SMTP.starttls(keyfile=None, certfile=None, context=None)[/python]

เป็นคำสั่งสำหรับเชื่อมต่อ SMTP เข้ารหัสโหมด TLS (Transport Layer Security)

[python]SMTP.sendmail(from_addr, to_addrs, msg)[/python]

ส่งอีเมล

[python]SMTP.quit()[/python]

ปิดการเชื่อมต่อ

ตัวอย่างการใช้งาน
ส่งอีเมล (เฉพาะข้อความ ไม่มีหัวข้ออีเมล อาจถูกมองเป็นสแปมได้)

[python]
import smtplib
server = smtplib.SMTP('Host SMTP', port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(user, password)
text = "Test by Python"
server.sendmail("you_email", "to_email", text)
server.quit()
[/python]

นำไปใช้งานกับ G-mail







ไลบรารี email



หากต้องการแนบไฟล์ ส่งเป็น HTML ใส่หัวข้อเพิ่มเติม ต้องใช้ไลบรารี email เข้ามาใช้งานร่วมด้วยครับ

เนื่องจากไลบรารี email มีรายละเอียดการใช้งานที่ซับซ้อนมากมากเป็นไลบรารีหนึ่งของภาษา Python ผมจึงขอนำเฉพาะคำสั่งที่ใช้งานบ่อยมาใช้ครับ


import ไลบรารีเข้ามา


[python]
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.base import MIMEBase
from email import encoders
[/python]


สามารถกำหนดรายละอียดการส่งอีเมลด้วยไลบรารี email ได้ดังนี้



ใส่รายเอียดเนื้อหาอีเมลทั้งแบบ plain และแบบ HTML ได้ดังนี้

[python]
body = "Python test mail"
bodyhtml = """
<html>
<head></head>
<body>
<b>By Python</b>
</p>
</body>
</html>
"""

msg.attach(MIMEText(body, 'plain')) # ส่งแบบ plain
msg.attach(MIMEText(bodyhtml, 'html')) # ส่งแบบ HTML
[/python]

แนบไฟล์รูปภาพไปพร้อมกับอีเมล
ใช้คำสั่ง attach

[python]
attachment = "ไฟล์รูปภาพ.jpg"
fp = open(attachment, 'rb')
img = MIMEImage(fp.read())
fp.close()
img.add_header('Content-ID','<image1>')
img.add_header('Content-Disposition', 'inline', filename=attachment)
msg.attach(img)
[/python]

แนบไฟล์ zip หรือไฟล์อื่น ๆ ไปพร้อมกับอีเมล

[python]
attachmentfile = "ไฟล์ที่ต้องการแนบ"
file = MIMEBase('application', "octet-stream")
file.set_payload(open(attachmentfile, 'rb').read())
encoders.encode_base64(file) # เข้ารหัสไฟล์เป็น base64
file.add_header('Content-Disposition','attachment; filename="%s"' % os.path.basename(attachmentfile)) # ใช้ไลบรารี os มาช่วยในการระบุชื่อและนามสกุลของไฟล์
msg.attach(file)
[/python]

ตัวอย่างการใช้งาน
ตัวอย่างที่ 1 ส่งอีเมลแบบ plain และแบบ HTML



ตัวอย่างที่ 2 ส่งอีเมลพร้อมแนบไฟล์รูปภาพและไฟล์อื่น ๆ


อ่านเอกสารการใช้งานไลบรารี smtplib และไลบรารี email ได้ที่
docs.python.org/3/library/smtplib.html
docs.python.org/3/library/email.html

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)