Đính kèm nhiều tệp vào email Python



  1. DZone
  2. mã hóa
  3. ngôn ngữ
  4. Gửi Email với (các) tệp đính kèm bằng Python

Gửi Email với (các) tệp đính kèm bằng Python

Đoạn mã này sẽ giúp bạn gửi email (có tệp đính kèm) bằng Python

Đính kèm nhiều tệp vào email Python
qua

Trình quản lý đoạn trích

·

Tháng năm. 16, 06 · Đoạn mã

Thích (1)

Bình luận

Tiết kiệm

tiếng riu ríu

38. 51K Lượt xem

Tham gia cộng đồng DZone và có được trải nghiệm thành viên đầy đủ

Tham gia miễn phí

Can't remember if I wrote this or found it on the Web or a combination, so I won't take credit per se -- I'm just posting it as reference.


import smtplib
import os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders

def send_mail(send_from, send_to, subject, text, files=[], server="localhost"):
  assert type(send_to)==list
  assert type(files)==list

  msg = MIMEMultipart()
  msg['From'] = send_from
  msg['To'] = COMMASPACE.join(send_to)
  msg['Date'] = formatdate(localtime=True)
  msg['Subject'] = subject

  msg.attach( MIMEText(text) )

  for f in files:
    part = MIMEBase('application', "octet-stream")
    part.set_payload( open(file,"rb").read() )
    Encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
    msg.attach(part)

  smtp = smtplib.SMTP(server)
  smtp.sendmail(send_from, send_to, msg.as_string())
  smtp.close()


Python (ngôn ngữ)

Ý kiến ​​​​của những người đóng góp DZone là của riêng họ

Phổ biến trên DZone

  • Sang trái. Tạo ra giá trị trong Scrum
  • Sự khác biệt giữa Tuân thủ Dữ liệu và Bảo mật Dữ liệu là gì?
  • Cách chúng tôi giảm độ trễ phục vụ trực tuyến từ 1. 11 đến 123. 6ms với cơ sở dữ liệu SQL phân tán
  • Khi nào nên sử dụng @DynamicUpdate với Spring Data JPA


Bình luận

Tài nguyên đối tác

Vì vậy, hãy đặt mình vào tình thế mà bạn phải gửi từng email có tệp đính kèm pdf, nhưng mỗi pdf đều khác nhau, vì nó được tùy chỉnh cho mỗi người. Vì vậy, python có một cách dễ dàng để giải quyết vấn đề này và sẽ giúp cuộc sống của bạn dễ dàng hơn rất nhiều

Tìm cách giải quyết vấn đề mà tôi đang gặp phải, tôi đã tìm ra nhiều cách để gửi e-mail bằng python, logic là giống nhau cho mọi mã, nhưng một anh chàng này đã giải thích rất hay nên anh ấy tên là Corey và bạn có thể theo dõi anh ấy.

(50) Corey Schafer — YouTube

Trước khi chúng tôi tìm hiểu kiến ​​thức cơ bản về cách gửi email, điều quan trọng là phải làm một việc cụ thể trong tài khoản google của bạn. Chúng tôi cần bật các ứng dụng kém an toàn hơn

Liên kết để thay đổi cài đặt này ở đây

https. //www. Google. com/cài đặt/bảo mật/ứng dụng kém an toàn hơn

Giải thích máy chủ SMTP là gì

SMTP có nghĩa là gì? . Làm một phép tương tự, nó hoạt động giống như một sân giữa trong bóng đá, nó nhận bóng và kết nối với các tiền đạo

  • Làm thế nào nó hoạt động?

Sau khi bạn nhấp để gửi email, email của bạn sẽ được chuyển đổi thành mã chuỗi và được gửi đến máy chủ SMTP sẽ xử lý mã và gửi tin nhắn đến người nhận, nếu nó không tồn tại, email sẽ bị mất trong bản dịch

  • Chúng tôi sẽ sử dụng như thế nào

SMTP có các máy chủ khác nhau, vì vậy chúng tôi sẽ sử dụng smtp@gmail. com vì chúng tôi đang sử dụng tài khoản gmail và SMTP có các cổng khác nhau và chúng tôi sẽ sử dụng cổng 465 có mã hóa SSL (Tôi sẽ cố gắng giải thích ý nghĩa của SSL sau này*)

Hãy bắt tay vào viết mã

Đối với mã này, tôi đang sử dụng google colab để chạy. Tôi đã bắt đầu sử dụng jupyter notebook nhưng tôi đã gặp phải một số vấn đề với đầu ra trong một lần thử nên một người đã đề xuất sử dụng google colab và tôi thực sự thích nó

Bước đầu tiên, bạn sẽ cần tạo một tệp excel, tôi khuyên bạn nên sử dụng excel chứ không phải danh sách trực tiếp trong python, ý tôi là nó sẽ hoạt động, nhưng trong khi viết mã, tôi đã nhận được một số /xa0 trong khoảng trống của mình và điều đó làm lỗi của bạn . Trong trang đầu tiên của bạn phải là tên của các tệp mà bạn sẽ gửi đến người nhận của mình và trang thứ hai, bạn cần đặt email của người nhận

Một lưu ý quan trọng ở đây là chúng tôi sẽ sử dụng khung dữ liệu gấu trúc để đọc tệp excel của mình, vì vậy tôi khuyên bạn nên đặt hàng đầu tiên trong bảng excel là tên của cột để giúp cuộc sống của bạn dễ dàng hơn, chẳng hạn như đối với trang tính đầu tiên bạn có thể

  • Nhập tệp
from google.colab import files
uploaded = files.upload()

Bạn phải nhập các tệp bạn sẽ gửi (tệp pdf) và tệp excel mà bạn sẽ sử dụng

  • Nhập thư viện
import pandas as pd
import smtplib
from email.message import EmailMessage

Các thư viện được nhập, chúng tôi phải chuyển đổi các khung dữ liệu thành danh sách để có thể lặp lại, vì vậy đây là mã

#Sheet4 is where the emails are located
data = pd.read_excel('EXCELFILE.xlsx', sheet_name='Sheet4')
#Sheet3 is the name of the pdf files
data1 = pd.read_excel('EXCELFILE.xlsx', sheet_name='Sheet3')
#translating into lists
emails = data.values.tolist()
pdf_file = data1.values.tolist()
  • Bắt đầu mã email

Đối với mã email, tôi sẽ chia thành hai loại mã, đầu tiên sẽ là một email đơn giản có tệp đính kèm pdf và email thứ hai sẽ có mã HTML để cố gắng làm cho nó trông đẹp và chuyên nghiệp hơn (lưu ý. Tôi chưa từng tiếp xúc với HTML trước đây, vì vậy hiện tại tôi đang viết mã này, tôi không giỏi về nó lắm)

Email đơn giản không có phần HTML

sender = 'SENDEREMAIL'
password = 'yourpassword'

count = 1
for i in range(len(emails)):
receiver = emails[i][0]
msg = EmailMessage()
msg['Subject'] = 'Course Book - GMF Unicamp'
msg['From'] = sender
msg['To'] = receiver
msg.set_content('Good Night, \n Here it is your course book from our investment course. \n Att, \n Team GMF')
file = pdf_file[i][0]
with open(file,'rb') as f:
file_data = f.read()
file_name = f.name
msg.add_attachment(file_data, maintype='application', subtype = 'octet-stream', filename=file_name)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login(sender, password)
smtp.send_message(msg)
print(count)
count = count+1

Giải thích mã một chút

  1. Bước đầu tiên là xác định ai đang gửi email và mật khẩu của bạn
  2. Sau đó, chúng tôi mở một lần lặp lại với một chữ “for” đơn giản, với một phạm vi bao gồm tất cả các email trong danh sách
  3. Bây giờ chúng tôi xác định biến email và biến tệp
  4. “Với mở” có nghĩa là chúng tôi đang cấp quyền truy cập để mở pdf, “rb” đang đọc và nhị phân, “msg. add_attachment” đang thêm bản pdf vào email của chúng tôi
  5. Cuối cùng, chúng tôi đang mở liên hệ với máy chủ SMTP, nhập thông tin đăng nhập và mật khẩu của chúng tôi và cuối cùng là gửi email

Ghi chú. Tôi đã tạo biến đếm, để nếu xảy ra lỗi, tôi biết mã của mình ở đâu trong danh sách của mình

*SSL là một giao thức mã hóa và chúng tôi đang sử dụng cổng 465 vì mã hóa đó bắt đầu tự động trước khi giao tiếp SMTP, để đảm bảo rằng tin nhắn của chúng tôi sẽ không bị chặn hoặc thay đổi trước khi đến tay người nhận

Gửi email “chuyên nghiệp” hơn với HTML

Được rồi, mã ở trên hoạt động và thật hữu ích khi gửi email cho nhiều người, nhưng bạn có thể làm tốt hơn. Tôi phải nói rằng tôi không giỏi thiết kế lắm nên thực sự tôi đã cố gắng làm cho nó đẹp. HTML khá dễ thao tác, vì vậy trước tiên tôi sẽ hiển thị mã cơ sở cho biết HTML sẽ nhập vào đâu và sau đó tôi sẽ giải thích mã HTML

from email.message import EmailMessage
sender = "SENDEREMAIL"
password = "PASSWORD"
for i in range(2):
receiver = emails[i][0]
msg = EmailMessage()
msg['Subject'] = 'Course Book - GMF Unicamp'
msg['From'] = sender
msg['To'] = receiver
msg.set_content('This is a plain text email')
msg.add_alternative("""\
HTML code will be here
""", subtype='html')
file = pdf_file[i][0]
with open(file,'rb') as f:
file_data = f.read()
file_name = f.name
msg.add_attachment(file_data, maintype='application', subtype = 'octet-stream', filename=file_name)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login(sender, password)
smtp.send_message(msg)

Đối với email của tôi, tôi muốn nó trông đơn giản và đẹp mắt. Vì vậy, để làm cho nó trông đẹp mắt, tôi quyết định đặt logo của câu lạc bộ tài chính mà tôi là thành viên, địa chỉ và hai siêu liên kết, một cho trang instagram của chúng tôi và một cho trang web của chúng tôi

Để sử dụng hình ảnh, tôi đã tìm ra một cách nhanh chóng để có được hình ảnh bạn muốn, đó là bạn phải tìm kiếm hình ảnh trong google hình ảnh, sau đó kiểm tra bằng cách nhấp chuột phải và sao chép mã html, nó giúp cuộc sống của tôi dễ dàng hơn. Ngoài ra, với HTML, bạn có thể đặt siêu liên kết đến trang web/instagram của mình và bất kỳ liên kết nào bạn muốn và điều đó thật tuyệt

Đây là mã HTML





Good Night,


Here it's your course book from the investment course that you attended this semester!


Enjoy your studies !


att, GMF








Đính kèm nhiều tệp vào email Python






Adress here

View in Browser | Instagram



Cơ sở của HTML

HTML hoạt động với các bảng, vì vậy hãy tưởng tượng màn hình của bạn là một trang trống mà bạn có thể tạo một số bảng và bạn có thể viết vào các bảng này

  1. xác định nội dung phần thân của tài liệu
  2. xác định hàng “tr = table row”
  3. định nghĩa dữ liệu “td = dữ liệu bảng”
  4. For writing you can open with

    and can do line breaks with
    (I didn’t use these).

  5. To make you text bold use
  6. Để sử dụng liên kết, hãy sử dụng “href”

Như bạn có thể thấy, nó khá đơn giản, nhưng là một ngôn ngữ mã hóa hay mà tôi sẽ cố gắng học nó tốt hơn

Sau khi đặt mã HTML vào mã python, email của bạn sẽ trông như thế này và chú ý nếu email của bạn trông giống trên điện thoại và sổ ghi chép của bạn vì khi tôi đang thử nghiệm, tôi phải sửa một số thứ

Tôi không sử dụng IMAC nhưng tôi không thể tìm thấy sổ ghi chép nào trên trang web này có cùng inch

Ghi chú. Tôi không biết bạn muốn gửi bao nhiêu email, nhưng để cho bạn biết khi tôi đang làm việc, tôi đã gửi khoảng 180 email và mất khoảng 1 tiếng rưỡi, mất nhiều thời gian nhưng nhanh hơn và ít hơn . Miễn là tôi nhớ bạn có thể gửi tối đa 500 email mỗi ngày

Cảm ơn bạn đã đọc, nếu bạn có ý kiến ​​​​về những gì tôi giải thích, hãy để lại nó bên dưới và tôi sẽ cố gắng trả lời nó