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

Python Send Email: คู่มือการส่งอีเมล

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

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

ในคู่มือนี้ เราจะอภิบายวิธีส่งอีเมลด้วย Python เราจะเดินผ่านไลบรารี email และ smtplib ว่าทำงานอย่างไร และเขียนโปรแกรมตัวอย่างเพื่อส่งอีเมล

โดยไม่ล่าช้า มาเริ่มกันเลย!

การส่งอีเมลด้วย Python

เมื่อคุณส่งอีเมลจากโปรแกรมคอมพิวเตอร์ โปรแกรมของคุณจะส่งข้อความโดยใช้โปรโตคอลที่เรียกว่า Simple Mail Transfer Protocol (SMTP) โปรโตคอลนี้ถูกใช้โดยบริการอีเมลและไคลเอนต์ทั่วโลกเพื่อส่งข้อความ

เพื่อส่งอีเมลจากโปรแกรมคอมพิวเตอร์ คุณจะต้องมีเซิร์ฟเวอร์ SMTP คุณสามารถตั้งค่าเองได้ แต่คุณไม่จำเป็นต้องทำเสมอไป บริการอย่าง Gmail และ Outlook 提供บริการ SMTP ดังนั้นคุณสามารถใช้บัญชีอีเมลที่มีอยู่เพื่อส่งอีเมล

สำหรับคู่มือนี้ เราจะสมมติว่าคุณส่งอีเมลจากเซิร์ฟเวอร์ SMTP ของ Gmail คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์ SMTP ของพวกเขาในเอกสารอย่างเป็นทางการของ Gmail หากต้องการทราบว่าผู้ให้บริการอีเมลของคุณรองรับ SMTP หรือไม่ ให้ค้นหาออนไลน์หา '[ชื่อผู้ให้บริการของคุณ] SMTP credentials'

เรามี 3 ขั้นตอนที่ต้องทำตามเพื่อส่งอีเมล:

  • กำหนดค่าการเชื่อมต่อ SMTP
  • สร้างออบเจ็กต์ข้อความ
  • ส่งข้อความผ่าน SMTP

การกำหนดค่าการเชื่อมต่อ SMTP

เพื่อเริ่มต้น มาตั้งค่าการเชื่อมต่อ SMTP ของเรา เราสามารถทำได้โดยใช้ไลบรารีชื่อ smtplib ซึ่งให้โค้ดทั้งหมดที่เราต้องการเพื่อจัดการการเชื่อมต่อ ขอบคุณไลบรารีนี้ ใช้เพียงไม่กี่บรรทัดของโค้ดก็ส่งอีเมลได้

เริ่มต้นด้วยการนำเข้าไลบรารี smtplib เข้าโค้ดของคุณ:

import smtplib

ตอนนี้เราต้องตั้งค่าตัวแปรที่เก็บข้อมูลประจำตัวสำหรับเซิร์ฟเวอร์ SMTP ของเรา การเก็บค่าเหล่านี้ในตัวแปรจะช่วยให้โค้ดของเราอ่านง่ายขึ้น นี่คือตัวแปรที่เราจะใช้:

sender = 'test@careerkarma.com'
password = '123456'
server = 'smtp.gmail.com'
port = 465

โค้ดนี้มีการกำหนดค่าทั้งหมดที่เราต้องการเพื่อสร้างการเชื่อมต่อ SMTP ตอนนี้ที่เราตั้งค่าแล้ว เราสามารถล็อกอินเข้าสู่เซิร์ฟเวอร์ SMTP ของเราได้:

server = smtplib.SMTP_SSL(server, port)
server.login(sender, password)

โค้ดของเราสร้างการเชื่อมต่อ SSL ไปยังเซิร์ฟเวอร์ SMTP ของเรา นี่หมายความว่าเราใช้ Secure Socket Layer (SSL) เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ของเรา SSL มีความปลอดภัยมากกว่าการเชื่อมต่อแบบดั้งเดิม และเป็นมาตรฐานบนเซิร์ฟเวอร์ SMTP

การเชื่อมต่อ SMTP ของเราตอนนี้พร้อมแล้ว!

สร้างออบเจ็กต์ข้อความ

โค้ดของเรายังไม่ทำอะไรมาก: มันแน่นอนว่าไม่ได้ส่งอีเมล นั่นเพราะเรายังไม่ได้สร้างออบเจ็กต์ข้อความ มาทำกันโดยใช้ไลบรารี email แม้คุณจะใช้ smtplib สร้างออบเจ็กต์ข้อความได้ ไลบรารี email ก็กระชับกว่า

มาเริ่มต้นด้วยการนำเข้าแพ็กเกจ email ที่จำเป็น:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

ด้วยไลบรารีเหล่านี้นำเข้าแล้ว เราสามารถสร้างออบเจ็กต์ข้อความของเราได้:

message = MIMEMultipart()
body = 'This is an email sent from Python!'
message['From'] = sender
message['To'] = 'test@careerkarma.com'
message['Subject'] = 'This is a test email'
message.attach(MIMEText(body, 'plain'))

เราเริ่มต้นด้วยการ инициализация ออบเจ็กต์ชื่อ 'message' ออบเจ็กต์นี้อ้างอิงคลาส MIMEMultipart จากไลบรารี email เราจึงระบุเนื้อหาของอีเมลและผู้ส่ง ผู้รับ และหัวข้อ

บรรทัดสุดท้ายของโค้ดแนบเนื้อหาของข้อความของเราเข้ากับอีเมล

ส่งข้อความ

ตอนนี้สิ่งที่เหลือคือส่งข้อความของเรา:

server.send_message(message)

เมื่อเรารันโค้ดทั้งหมดร่วมกัน อีเมลจะถูกส่ง! อีเมลที่มีหัวข้อ 'This is a test email' จะถูกส่งจาก test@careerkarma.com ไปยัง test@careerkarma.com

การอ่านเทมเพลตจากไฟล์

เนื้อหาอีเมลของเรายาวแค่บรรทัดเดียว นี่หมายความว่ามีประโยชน์กว่าที่จะเขียนเนื้อหาอีเมลภายใน Python โดยตรง อีเมลส่วนใหญ่ยาวกว่านี้ จึงดีกว่าที่จะสร้างเทมเพลตที่เก็บข้อความสำหรับอีเมลเฉพาะ

เราจะเริ่มด้วยการสร้างไฟล์ชื่อ email.txt และวางเนื้อหาต่อไปนี้:

Hello ${NAME},
This is a test email!
Thanks,
Career Karma

เทมเพลตนี้มีตัวแปรชื่อ "NAME" ซึ่งอยู่ภายในวงเล็บปีกกา ({}) และนำหน้าด้วยเครื่องหมายดอลลาร์ ($) ตัวแปรนี้จะถูกแทนที่ด้วยชื่อผู้รับในภายหลังในโค้ดของเรา

ตอนนี้เราจะต้องอ่านเทมเพลตนี้เข้าโค้ดของเรา เราสามารถทำได้โดยการสร้างคลาสชื่อ read_email ที่ใช้เมธอด open() เพื่ออ่านไฟล์ของเรา

เราจะนำเข้า Template object จากไลบรารี string เราจะใช้ object นี้สร้างออบเจ็กต์ที่อ่านได้โดยอีเมลของเรา วางบรรทัดโค้ดต่อไปนี้ที่ด้านบนของโปรแกรม Python ของคุณ:

from string import Template

ใต้คำสั่ง import ทั้งหมด วางโค้ดนี้:

def read_email():
    with open('email.txt', 'r') as file:
        contents = file.read()
    return Template(contents)

ฟังก์ชันนี้จะอ่านไฟล์ชื่อ "email.txt" เข้าตัวแปร "contents" ค่าของมันจะถูกแปลงเป็น Template object โดยใช้เมธอด Template จากไลบรารี "string" คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการอ่านไฟล์ในบทช่วยสอน Python read file ของเรา

เปลี่ยนบรรทัดโค้ดต่อไปนี้ในโปรแกรมของคุณ:

body = 'This is an email sent from Python!'

ให้ใช้โค้ดนี้แทน:

email_content = read_email()
body = email_content.substitute(NAME="Test")

โค้ดนี้เรียกฟังก์ชัน read_email() ในโค้ดของเราเพื่ออ่านเนื้อหาของไฟล์ "email.txt" จากนั้นค่าของ NAME ภายในเทมเพลตอีเมลของเราถูกแทนที่ด้วยค่า "Test" รวมกันโค้ดของเราจะมีลักษณะนี้:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from string import Template

def read_email():
    with open('email.txt', 'r') as file:
        contents = file.read()
    return Template(contents)

sender = 'test@careerkarma.com'
password = '123456'
server = 'smtp.gmail.com'
port = 465

server = smtplib.SMTP_SSL(server, port)
server.login(sender, password)

message = MIMEMultipart()
email_content = read_email()
body = email_content.substitute(NAME="Test")
message['From'] = sender
message['To'] = 'test@careerkarma.com'
message['Subject'] = 'This is a test email'
message.attach(MIMEText(body, 'plain'))

server.send_message(message)

เมื่อคุณรันโปรแกรมนี้ โดยแทนที่ข้อมูลประจำตัวเซิร์ฟเวอร์ SMTP ของคุณ อีเมลจะถูกส่ง คุณเพิ่งเขียนโปรแกรมส่งอีเมลเสร็จแล้ว

สรุป

การส่งอีเมลใน Python ไม่ได้ต้องยาก ถ้าไม่ใช้เทมเพลต การส่งอีเมลใช้เพียงไม่กี่บรรทัดของโค้ด โมดูล email และ smtplib ทำหน้าที่หนักส่วนใหญ่ ด้วย ذلك คุณสามารถใช้โมดูล email อย่างกว้างขวางเพื่อสร้างเทมเพลตสำหรับอีเมลของคุณที่สามารถแทนที่ค่าได้

คุณพร้อมสำหรับความท้าทายไหม? เปลี่ยนโปรแกรมจากข้างต้นเพื่อรองรับการส่งอีเมลให้หลายผู้รับ Hint: คุณจะต้องการใช้ลูป for เพื่อส่งอีเมลเหล่านี้

ตอนนี้คุณพร้อมที่จะเริ่มส่งอีเมลใน Python อย่างมืออาชีพแล้ว!