YÊU CẦU:
1. Sử dụng thư viện smtplib của python để kết nối đến gmail và gửi mail
2. Gửi mail hàng loạt với thông tin được lưu trữ trong file email_list.csv
THỰC HIỆN
1. Sử dụng thư viện smtplib của python để kết nối đến gmail và gửi mail
Code:'''
Kết nối đến Gmail để gửi mail
Điều kiện:
1. Tắt bảo mật 2 lớp
https://myaccount.google.com/security?utm_source=OGB&utm_medium=act#signin
2. Allow less secure apps: ON
https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none
nếu không chúng ta sẽ gặp lỗi
#smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials qe12sm2115875pjb.29 - gsmtp')
nếu trong nội dung email có gõ tiếng việt sẽ bị lỗi, các địa chỉ không gửi đến được sẽ được lưu vào file
'''
import smtplib, ssl
def send_mail(mail_from, mail_password, mail_to, mail_subject, mail_body): # Hàm gửi mail
port = 465 # For SSL
smtp_server = "smtp.gmail.com"
#mail_password = input("Type your password and press enter: ")
mail_message = f"Subject: {mail_subject}\n\n{mail_body}"
context = ssl.create_default_context()
try:
with smtplib.SMTP_SSL(smtp_server, port, context = context) as server:
server.login(mail_from, mail_password)
server.sendmail(mail_from, mail_to, mail_message)
print (f"Successfuly sent to '{mail_to}'")
except:
print (f"Communication failure in '{smtp_server}'")
# Định nghĩa các thông tin
email_info = {
"mail_from": "khanhvc.wrk@gmail.com",
"mail_password": "admin" ,
"mail_to": "khanhvc@tencongty.com",
"mail_subject" : "This is send python 3.10" ,
"mail_body": "This is for testing email",
#mail_password = input("Type your password and press enter:")
}
send_mail(**email_info)
2. Gửi mail hàng loạt với thông tin được lưu trữ trong file email_list.csv
Tạo file email_list.csv có dạng:'''
Kết nối đến Gmail để gửi mail, danh sách các email được lưu trữ trong file email_list.csv
Điều kiện:
1. Tắt bảo mật 2 lớp
https://myaccount.google.com/security?utm_source=OGB&utm_medium=act#signin
2. Allow less secure apps: ON
https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none
nếu không chúng ta sẽ gặp lỗi
#smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials qe12sm2115875pjb.29 - gsmtp')
'''
import smtplib, ssl
import pandas as pd
from pprint import pprint
from datetime import datetime
import os
path = os.getcwd() # lấy đường dẫn hiện tại
now = datetime.now().strftime("%Y-%b-%d_%H%M%S")
ERR_log = f"Send_Mail_{now}_ERR_logs.log" # định nghĩa tên file lưu trữ thông tin lỗi
def send_mail(mail_from, mail_password, mail_to, mail_subject, mail_body):
port = 465 # For SSL
smtp_server = "smtp.gmail.com"
#mail_password = input("Type your password and press enter: ")
mail_message = f"Subject: {mail_subject}\n\n{mail_body}"
context = ssl.create_default_context()
try:
with smtplib.SMTP_SSL(smtp_server, port, context = context) as server:
server.login(mail_from, mail_password)
server.sendmail(mail_from, mail_to, mail_message)
print (f"Successfuly sent to '{mail_to}'")
except:
f = open(ERR_log,"a")
f.write(f'Undelivered email to: {mail_to}')
f.write("\n")
f.close()
print (f"Communication failure in '{smtp_server}'")
pass
email_list = 'email_list.csv' # tên file lưu trữ thông tin thiết bị
column_name = ['mail_from', 'mail_subject', 'mail_to', 'mail_body', 'mail_password'] # chỉ định các cột cần lấy
try:
email_list = pd.read_csv(email_list, usecols = column_name, encoding = "utf-8") # đọc và xử lý chuyển dữ liệu về dạng DataFrame, và sử dụng code utf-8
email_list = email_list.to_dict(orient='records') # chuyển đổi về dict tương ứng (ví dụ: nếu file có 10 dòng thì sẽ tạo ra 9 (10 dòng bỏ đi dòng đầu tiên đã làm key) dictionary tương ứng)
#pprint(email_list)
for email_info in email_list:
send_mail(**email_info)
ERR_info = f"*** ERROR: Please check file : '{ERR_log}' at '{path}' ***\n"
print (ERR_info)
except:
ERR_info = f"*** ERROR: Please check file : '{email_list}' at '{path}' ***\n"
print (ERR_info)
pass
Tham khảo bài gửi mail có đính kèm attach file tại đây
Xong!