top of page

ส่งอีเมล์อัตโนมัติด้วย Python กับ Yagmail

Updated: Aug 15, 2021

เยอะแค่ไหนก็ส่งในพริบตาเดียว พร้อมปรับแต่งเนื้อหาอีเมล์ด้วยรายละเอียดของผู้รับ!! แค่เขียนตามก็ได้โรปแกรมไปใช้! เรียนกับ Ultimate Python

Bootcamp ปูพื้นฐาน Python จาก 0 ที่เดียวที่ดูแลคุณ "ตัวต่อตัว" จนนำไปใช้งานจริง เรียนรู้เพิ่มเติมเกี่ยวกับ Bootcamp


 
เอกสารประกอบ

 

ส่งอีเมล์ด้วย Python

การส่งอีเมล์เป็นอีกงานที่ไม่ว่าจะทำงานส่วนไหนก็ร่วมกัน ไม่ว่าจะเป็นการส่งอีเมล์เพื่อส่งข้อมูลต่างๆ การตอบรับ หรืออื่นๆ โดยเฉพาะกับการส่งอีเมล์ที่มีเนื้อหาเดิมๆ มีการเปลี่ยนแปลงแค่นิดหน่อยตามผู้รับ ที่มีการกำหนดเงื่อนไขการส่ง การเปลี่ยนแปลงอย่างชัดเจน การส่งอีเมล์แบบนี้เช่นเดียวกับงานในลักษณะที่ทำซ้ำๆ แบบนี้ สามารถสร้างระบบอัตโนมัติเพื่อทำงานส่วนนี้แทนได้!


 

คำสั่งในการส่งอีเมล์

การส่งอีเมล์ด้วยคำสั่งจริงๆ ใช้แค่คำสั่งเดียวเท่านั้น!! เดี๋ยว Ultimate Python จะมาเล่าให้ฟังว่ารายละเอียดการใช้งาน จะต้องเตรียมอะไรบ้าง เพื่อให้ทุกคนใช้คำสั่งนี้ได้!


yag.send( 
  to=recipients, 
  subject=email_subject, 
  contents=[body,pic], 
  attachments=email_attachment 
)

 

เครื่องมือที่ต้องใช้

ติดตั้งเครื่องมือ

yagmail library ที่ใช้ในการส่งอีเมล์ของ Gmail


In [1]:
!pip install yagmail
Requirement already satisfied: yagmail in c:\users\acer\anaconda3\lib\site-packages (0.14.256) Requirement already satisfied: premailer in c:\users\acer\anaconda3\lib\site-packages (from ...
 in c:\users\acer\anaconda3\lib\site-packages (from requests->premailer->yagmail) (3.0.4) 

 

นำเข้ามาใช้

import ตัว library มาใช้


In [2]:
import yagmail

 

เตรียม Gmail ในโหมด Development

สร้างอีเมล์ Gmail ใหม่ที่ใช้เพื่อส่งอีเมล์ด้วยคำสั่งโดยเฉพาะเพื่อความปลอดภัย และป้องกันความเสี่ยงในการเกิดบัคที่มีผลต่อ Account ได้ โดยจะต้องเข้าไปตั้งค่าที่ Google Account เพื่อเปิด less secure apps ให้เราสามารถเข้าถึงอีเมล์ได้ด้วยคำสั่ง


 

ระบุ Email ผู้ส่ง

ผ่านการส่งคำสั่ง yagmail.SMTP() ซึ่ง SMTP ย่อมาจาก Simple Mail Transfer Protocal เป็นมาตรฐานการเข้ารหัสเพื่อส่งอีเมล์ โดยเราจะใส่ข้อมูลของ gmail ที่จะใช้ส่งอีเมล์ ผ่าน parameter user= และ password=


 

กำหนด Email ผู้ส่ง

ในตัวอย่างจะเก็บอีเมล์เป็น string ไว้ในตัวแปร user_email และรหัสเป็น string เช่นเดียวกัน เก็บไว้ในตัวแปร user_password


In [3]:
user_email = "xxxxx@ultimatepython.co"
user_password = "xxxxxxxxx"

 

เข้า Email ด้วยรหัส

ใช้คำสั่ง yagmail.SMTP() กำหนด user=, password= parameter ที่ใช้รับค่า email, password โดยเราจะได้ข้อมูลของการเข้าสู่ระบบนั้นมา และจะต้องเก็บข้อมูลนี้ไปใช้งานต่อ ซึ่งจะเก็บไว้ในตัวแปร yag


In [4]:
yag = yagmail.SMTP(user_email,user_password)
yag

 

การยืนยันตัวตนด้วย OAuth 2.0

จะใช้การเข้าไปสร้าง Credentials เอาไว้บน Google Cloud Platform ก่อน และนำข้อมูลนี้ใช้ในการยืนยันตัวตนเพื่อสร้างการเชื่อมต่อ แทนการใช้รหัส gmail วิธีนี้ทำให้ไม่ต้องตั้งค่า Gmail เป็น Development Mode เอง (Google จัดการให้)

เมื่อสร้าง Credentials เสร็จเราจะใช้ไฟล์ที่เก็บข้อมูลนี้ที่อยู่ในรูป .json มาใช้ยืนยันตัวตนกับทาง Google


 

ยืนยันตัวตนด้วย Credentials

ใช้คำสั่ง yagmail.SMTP() ในการเข้าสู่ระบบเช่นเดียวกัน แต่แทนที่จะใช้ email, password ในการเชื่อมต่อ เราจะใช้ไฟล์ Credentials ที่เก็บข้อมูลของเรามาใช้ยืนยันตัวตนแทน


In [ ]:
user_email = ""
In [17]:
yag = yagmail.SMTP(user_email,oauth2_file='client_secret_92115420889-te134np4pno19un9pgihc91jbikp8fe3.apps.googleusercontent.com')

 

องค์ประกอบของอีเมล์

วันนี้เราจะพูดถึงรายละเอียดของอีเมล์ส่วนที่ใช้งานหลักๆ ที่เราใช้ในการส่งอีเมล์ปกติในทุกวัน


 

อีเมล์ผู้รับ

เราจะระบุอีเมล์ผู้รับเป็น string ซึ่งหากมีผู้รับหลายคนจะใช้ list ของ string


In [4]:
recipients = ['ultimatepython2@gmail.com','ultimatepython1@gmail.com']

 

อีเมล์ผู้รับ แบบมีการตั้ง Alias

Alias คือชื่อที่เราตั้งให้กับผู้รับที่จะแสดงแทนการแสดงตัวอีเมล์ ซึ่งหากต้องการตั้ง alias ให้กับผู้รับจะต้องบันทึก email ผู้รับไว้เป็น object ประเภท dictionary ที่มี key เป็น email และ value เป็น alias ของอีเมล์นั้น หากมีหลายผู้รับสามารถกำหนดเป็นข้อมูลหลายๆ คู่เอาไว้ใน dictionary ได้


In [5]:
recipients = {'ultimatepython2@gmail.com':'xippar'}

 

หัวข้ออีเมล์

เราจะใช้เป็น string object ซึ่งจะบันทึกไว้ในตัวแปร email_subject


In [6]:
subject = 'อีเมล์ตอบกลับอัตโนมัติด้วย Python'

 

เนื้อหาอีเมล์

ข้อความ

กำหนดเนื้อหาอีเมล์เป็น string และในตัวอย่างนี้เราจะเก็บเนื้อหาไว้ในตัวแปร body


In [7]:
body = 'เรียน ซิปป้า,\n\nอีเมล์นี้เป็นอีเมล์อัตโนมัติทีส่งจากระบบ Python\n\nด้วยความเคารพ,\nซิปป้า Ultimate Python'


 

การทำ f-string

การนำรายละเอียดจากที่อื่นมาใส่เป็นส่วนหนึ่งของข้อความที่เป็น template สร้างเอาไว้ในรูปแบบของ string และนำข้อมูลจากที่อื่นใส่ตัวแปร และนำไปประกอบเป็นส่วนหนึ่งด้วยการเขียน f'string'

การใส่ตัวแปร เป็นส่วนหนึ่งของ string


In [8]:
name = 'ซิปป้า'
In [9]:
body = f'เรียน {name},\n\nอีเมล์นี้เป็นอีเมล์อัตโนมัติทีส่งจากระบบ Python\n\nด้วยความเคารพ,\nซิปป้า Ultimate Python'



 

รูปในเนื้อหาอีเมล์

จะต้องมีการสร้างข้อมูลผ่านคำสั่ง yagmail.inline() ที่จะรับ path ของไฟล์ที่ต้องการใส่เข้าไปในส่วนเนื้อหา สำหรับภาพจะต้องระวังเรื่องของขนาดภาพด้วยเพราะจะทำการใส่ไปในขนาดจริง (อาจใหญ่หรือเล็กกว่าที่ต้องการ) หากต้องการปรับขนาดจะต้องปรับก่อนที่จะใส่เข้าไปในอีเมล์


In [10]:
pic = yagmail.inline('Bootcamp.png')



 

การแนบไฟล์ใดๆ

เราสามารถกำหนดไฟล์ที่ต้องการแนบไปกับอีเมล์ได้โดยกำหนด path ของไฟล์ที่ต้องการเป็น string หากมีหลายไฟล์ให้ระบุเป็น list ของ string ซึ่งในตัวอย่างจะสร้างเป็นตัวแปร email_attachment


In [11]:
email_attachment = 'Bootcamp.png'



 

การกำหนด alias ผู้ส่ง

สามารถกำหนด alias ที่ต้องการได้โดยใช้คำสั่ง yag.useralias ซึ่งสามารถกำหนด alias ที่ต้องการโดยใช้ = และกำหนดชื่อเป็น string ได้เลย


In [19]:
yag.useralias = 'Ultimate Python'



 

ส่งอีเมล์ที่ต้องการ

เมื่อกำหนดข้อมูลทั้งหมดที่ต้องการเรียบร้อย ก็ส่งคำสั่งเพื่อส่งอีเมล์ตามรายละเอียดที่เตรียมเอาไว้



In [20]:
yag.send(to=recipients,subject=subject,contents=[body,pic],attachments=email_attachment)
Out[20]:
{}




 

ถ้าชอบบทเรียนนี้ การกด subscribe และชวนเพื่อนมาเรียน จะช่วยเราได้มากอย่างที่คุณคิดไม่ถึงเลย :)


เรียนเรียน Python จาก 0 ฉบับวัยทำงานยุคใหม่

เริ่มไว ใช้ได้ทันที พร้อมการดูแลจากผู้สอนโดยตรง และกลุ่มแลกเปลี่ยนความรู้

เรียนรู้เกี่ยวกับคอร์สเรียนเพิ่มเติม https://ultimatepython.teachable.com/p/python-automation



1,059 views0 comments
bottom of page