Hướng dẫn python mail merge save as pdf - kết hợp thư python lưu dưới dạng pdf

Nếu bạn đã xây dựng ứng dụng của mình với Python và đang làm việc trên chức năng email, thì bạn đang gặp may. Mô-đun tích hợp Python, để gửi email rất dễ sử dụng, cung cấp danh sách rộng rãi các tính năng và hợp lý hóa đầu ra email hàng loạt. Hơn nữa, bạn có một số tùy chọn để thêm nội dung động bao gồm chức năng gốc (vòng lặp) và các mô -đun bên ngoài. Hôm nay chúng tôi sẽ khám phá cách gửi email được cá nhân hóa với Mail Hợp nhất trong Python.

Một vài từ về hợp nhất thư

Mail Merge là một cơ chế để tích hợp thông tin từ cơ sở dữ liệu đến mẫu email với các trình giữ chỗ, để thêm cá nhân hóa vào nhiều email. Chúng tôi đã giải thích chi tiết hợp nhất thư trong bài đăng trên blog này. Để nói một cách đơn giản, nếu bạn cần nhắm mục tiêu một danh sách người dùng qua email và giải quyết chúng theo tên, bạn có thể làm điều đó với một bảng và tập lệnh đơn giản. Hãy cùng xem cách làm điều này với Python và nhảy vào mã hóa! (Tham khảo hướng dẫn của chúng tôi để tìm hiểu cách gửi email một cách chi tiết.) & NBSP;

Nhiều email được cá nhân hóa với các vòng lặp

Cách đơn giản nhất để thực hiện hợp nhất thư trong Python để gửi nhiều email là chức năng và tập lệnh gốc của nó với các vòng lặp. Để làm điều này, bạn chỉ cần tạo cơ sở dữ liệu liên hệ (dễ nhất là bằng tệp .csv) và lưu nó vào thư mục với tập lệnh Python của bạn. Hãy nói rằng bạn cần gửi điểm kiểm tra cho một nhóm người, chỉ cần đưa dữ liệu của họ vào cơ sở dữ liệu .csv, như sau: & NBSP;

#name,email,score Alex,,79 Ann,,98

Sử dụng mã bên dưới để mở tệp cơ sở dữ liệu của bạn và lặp qua các hàng. Đặt {name} và {scors} Người giữ chỗ vào nội dung tin nhắn của bạn. Chúng sẽ được thay thế bằng các giá trị từ các cột thích hợp.

Chúng tôi luôn khuyên bạn nên chạy các thử nghiệm email trong môi trường tiền sản xuất để tránh gửi tin nhắn kiểm tra cho người nhận thực sự do nhầm lẫn. MailTrap là giải pháp tốt nhất cho việc này bởi vì nó bẫy tất cả các email của bạn trong hộp thư đến ảo để xem thêm và thăm dò. Tích hợp MailTrap như một máy chủ SMTP thông thường bằng cách dán thông tin đăng nhập của bạn dưới dạng đăng nhập và mật khẩu. & NBSP;

import csv, smtplib port = 2525 smtp_server = "smtp.mailtrap.io" login = "1a2b3c4d5e6f7g" # paste your login generated by Mailtrap password = "1a2b3c4d5e6f7g" # paste your password generated by Mailtrap message = """Subject: Your test score To: {recipient} From: {sender} Hi {name}, thanks for accepting our challenge! Your current score is {score}. Contact us if you have further questions. Cheers! """ sender = "" with smtplib.SMTP(smtp_server, port) as server: server.login(login, password) with open("students.csv") as file: reader = csv.reader(file) next(reader) # add this to skip the header row for name, email, score in reader: server.sendmail( sender, email, message.format(name=name, recipient=email, sender=sender, score=score) ) print(f'Sent to {name}')

Phản hồi của bạn sẽ trông giống như sau:

Sent to Ann Sent to Alex

Trong hộp thư đến MailTrap, bạn sẽ thấy các tin nhắn riêng cho mỗi người nhận. Kiểm tra xem người giữ chỗ đã được thay thế chính xác:

Kiểm tra email của bạn ngay bây giờ

Chương trình hợp nhất thư trong Python

Một tùy chọn khác là sử dụng công cụ Mailmerge dòng lệnh có sẵn trên cả PYPI và GitHub.

Bạn cũng nên lưu trữ cơ sở dữ liệu của mình trong tệp .csv. Tuy nhiên, nội dung tin nhắn có thể được tạo với động cơ mẫu Jinja2. Nó cung cấp cho bạn sự linh hoạt hơn và các tùy chọn để chế tạo các mẫu phức tạp. Ngoài ra, công cụ này hỗ trợ các tệp đính kèm, HTML và Markdown. & NBSP;

Hãy để xem cách nó hoạt động. Chúng tôi đã lấy các ví dụ được cung cấp trên trang Mailmerge GitHub và triển khai chúng trong môi trường của chúng tôi bằng MailTrap. Điều này làm cho các thử nghiệm email đơn giản hơn nhiều vì bạn không cần gửi tin nhắn riêng cho chính mình, như được cung cấp trong các mẫu mã gốc.

Chúng tôi sẽ nhảy vào ví dụ với các tệp đính kèm ngay lập tức và chúng tôi sẽ thêm điều kiện có/không. Điều này sẽ giúp làm việc với điểm kiểm tra từ ví dụ trước của chúng tôi theo cách chi tiết và cá nhân hóa hơn.

$ pip install mailmerge # install mailmerge first, we did it with pip $ mailmerge $ mailmerge --sample # run mailmerge --sample, this one will create template files Creating sample template email mailmerge_template.txt Creating sample database mailmerge_database.csv Creating sample config file mailmerge_server.conf

Chúng tôi nhận được ba tệp:

  • Mailmerge_template.txt - Nội dung tin nhắn với người giữ chỗ cùng với người nhận, người gửi và chủ đề
  • import csv, smtplib port = 2525 smtp_server = "smtp.mailtrap.io" login = "1a2b3c4d5e6f7g" # paste your login generated by Mailtrap password = "1a2b3c4d5e6f7g" # paste your password generated by Mailtrap message = """Subject: Your test score To: {recipient} From: {sender} Hi {name}, thanks for accepting our challenge! Your current score is {score}. Contact us if you have further questions. Cheers! """ sender = "" with smtplib.SMTP(smtp_server, port) as server: server.login(login, password) with open("students.csv") as file: reader = csv.reader(file) next(reader) # add this to skip the header row for name, email, score in reader: server.sendmail( sender, email, message.format(name=name, recipient=email, sender=sender, score=score) ) print(f'Sent to {name}')0 - Chi tiết người nhận để thay thế người giữ chỗ
  • ________ 11 Cấu hình máy chủ. Để đặt MailTrap thành máy chủ SMTP, hãy sử dụng các phần sau & NBSP; cấu hình:
    To set Mailtrap as an SMTP server, use the following  configuration:
[smtp_server] host = smtp.mailtrap.io port = 2525 username = YOUR_MAILTRAP_USERNAME security = STARTTLS

Lưu ý rằng chúng tôi đã đặt mật khẩu ở đây. Nó được yêu cầu mỗi khi bạn chạy Mailmerge.

Chỉnh sửa các tệp này bằng cách thêm dữ liệu của bạn và sau đó chạy lại Mailmerge.

Lưu ý: Người giữ chỗ trong các mẫu Mailmerge đi trong niềng răng xoăn đôi {{Placeholder}}.{{ placeholder }}.

Bây giờ, hãy để sáng tác và gửi tin nhắn. & NBSP;

Trong ví dụ Mailmerge, họ sử dụng import csv, smtplib port = 2525 smtp_server = "smtp.mailtrap.io" login = "1a2b3c4d5e6f7g" # paste your login generated by Mailtrap password = "1a2b3c4d5e6f7g" # paste your password generated by Mailtrap message = """Subject: Your test score To: {recipient} From: {sender} Hi {name}, thanks for accepting our challenge! Your current score is {score}. Contact us if you have further questions. Cheers! """ sender = "" with smtplib.SMTP(smtp_server, port) as server: server.login(login, password) with open("students.csv") as file: reader = csv.reader(file) next(reader) # add this to skip the header row for name, email, score in reader: server.sendmail( sender, email, message.format(name=name, recipient=email, sender=sender, score=score) ) print(f'Sent to {name}')2Command để kiểm tra email và in đầu ra ngay lập tức. Chúng tôi đã giành chiến thắng cần phải làm điều này bởi vì tất cả các email của chúng tôi sẽ đến MailTrap, nơi chúng tôi sẽ có thể thấy chúng nên được hiển thị bằng webmail như thế nào mà không có nguy cơ gửi đến hộp thư đến thực. & NBSP;

$ cat mailmerge_template.txt TO: {{Email}} SUBJECT: Your testing score is here FROM: Testing House <> ATTACHMENT: attachments/{{File}} {# here, the file is located in the “attachments” folder, which must be placed in the same directory as your current template file #} Hi {{Name}}, thanks for accepting our challenge! Your current score is {{Score}}. {% if Answer == "Yes" -%} We are happy to confirm that you are ready to move to the next level! {%- endif %} If you wish to improve your score, you take the test once again, Contact us if you have further questions. Cheers! $ cat mailmerge_database.csv Name,Email,Score,Answer,File Alex,,79,No,alex.pdf Ann,,98,Yes,anna.pdf $ mailmerge --no-dry-run --no-limit # send messages to all addresses on the list

Kiểm tra đầu ra trong hộp thư đến MailTrap của bạn:

DOCX Mail Merge

Docx-Mailmerge là một lựa chọn thú vị khác để tạo các mẫu có thể được gửi qua email từ ứng dụng Python của bạn. Đúng như tên gọi, nó hợp nhất dữ liệu từ các tệp Office Open XML (DOCX). Đồng thời, nó không yêu cầu MS Word và tương thích với bất kỳ hệ thống nào. & NBSP;

Lưu ý: Gói này yêu cầu LXML. & NBSP;

Tuy nhiên, các gói Hợp nhất và Mailmerge docx Mail dường như đang xung đột. Chúng được cài đặt dưới cùng tên, điều này có thể khiến không thể sử dụng các gói này song song. Hãy ghi nhớ điều này nếu bạn gặp bất kỳ rắc rối nào với việc cài đặt.

$ pip install docx-mailmerge # install with pip

Trước khi chúng tôi tiến xa hơn với mã hóa, chúng tôi cần chuẩn bị một tài liệu với các trường hợp nhất. Bạn có thể làm điều này với bất kỳ trình soạn thảo nào hỗ trợ định dạng .Docx (MS Word, OpenOffice, WPS Office, v.v.). Các bước sau đây tương tự nhau trong nhiều trình chỉnh sửa tài liệu: import csv, smtplib port = 2525 smtp_server = "smtp.mailtrap.io" login = "1a2b3c4d5e6f7g" # paste your login generated by Mailtrap password = "1a2b3c4d5e6f7g" # paste your password generated by Mailtrap message = """Subject: Your test score To: {recipient} From: {sender} Hi {name}, thanks for accepting our challenge! Your current score is {score}. Contact us if you have further questions. Cheers! """ sender = "" with smtplib.SMTP(smtp_server, port) as server: server.login(login, password) with open("students.csv") as file: reader = csv.reader(file) next(reader) # add this to skip the header row for name, email, score in reader: server.sendmail( sender, email, message.format(name=name, recipient=email, sender=sender, score=score) ) print(f'Sent to {name}')3, chọn import csv, smtplib port = 2525 smtp_server = "smtp.mailtrap.io" login = "1a2b3c4d5e6f7g" # paste your login generated by Mailtrap password = "1a2b3c4d5e6f7g" # paste your password generated by Mailtrap message = """Subject: Your test score To: {recipient} From: {sender} Hi {name}, thanks for accepting our challenge! Your current score is {score}. Contact us if you have further questions. Cheers! """ sender = "" with smtplib.SMTP(smtp_server, port) as server: server.login(login, password) with open("students.csv") as file: reader = csv.reader(file) next(reader) # add this to skip the header row for name, email, score in reader: server.sendmail( sender, email, message.format(name=name, recipient=email, sender=sender, score=score) ) print(f'Sent to {name}')4 và nhập tên trường. Chúng tôi sẽ tiếp tục với ví dụ về điểm kiểm tra của chúng tôi, vì vậy các trường của chúng tôi sẽ là tên của tên này, và điểm số. Trong văn phòng WPS, có vẻ như thế này: & nbsp;

Với phương thức này, hãy tạo mẫu sau:

Bây giờ, chúng ta có thể hợp nhất các giá trị với mã sau và tạo một tập hợp các tài liệu riêng biệt với các trường được điền tự động:

# import necessary packages from mailmerge import MailMerge # specify the input template template = "Test-score-template.docx" with open("students.csv") as file: reader = csv.reader(file) next(reader) # add this to skip the header row for name, email, score in reader: document = MailMerge(template) document.merge( Name=name, Score=score) document.write(f'test-score-{name}.docx')

Chúng tôi đã chứng minh một ví dụ đơn giản về cách sử dụng công cụ này để hiển thị cho bạn khái niệm và các tùy chọn tiềm năng. Với Docx-Mailmerge, bạn có thể xây dựng các mẫu phức tạp với một danh sách dài các biến, bảng điền kinh và tạo tài liệu với nhiều trang.

Từ cuối cùng

Mail hợp nhất trong Python là một phương pháp đơn giản nhưng mạnh mẽ để gửi email được cá nhân hóa và tạo các mẫu. Chúng tôi đã kiểm tra một số ví dụ làm việc đơn giản để giúp bạn thành thạo chức năng của Python. Không bao giờ ngừng thử nghiệm và luôn kiểm tra kỹ lưỡng email của bạn trước khi thực sự gửi chúng!

Tôi có thể lưu một sự hợp nhất thư dưới dạng tài liệu riêng biệt không?

Lưu mỗi chữ cái được hợp nhất dưới dạng một tệp riêng thường, kết quả hợp nhất thư cho một tài liệu mới là một tệp dài có thể được chỉnh sửa và in.Sử dụng tính năng tài liệu chính, có thể lưu mỗi tệp dưới dạng một tệp riêng biệt.Using the Master Document feature, it's possible to save each as a separate file.

Làm cách nào để tạo một sự hợp nhất thư từ PDF?

Sao chép văn bản của macro từ bên dưới và thêm vào Word.Thêm các trường sau vào dữ liệu hợp nhất thư của bạn: DocFolderPath, DocFilename, PdffolderPath, pdffilename.Trong các trường tên tệp, đặt tên tệp bạn muốn cho các tài liệu từ được phân tách và các tệp PDF được chuyển đổi.

Làm thế nào để bạn tạo một sự hợp nhất thư trong Python?

Ví dụ về Python..
Hợp nhất thư ..
Tìm kích thước (độ phân giải) của hình ảnh ..
Tìm băm của tập tin ..
Tạo một thư mục lồng nhau một cách an toàn ..
Bắt nhiều ngoại lệ trong một dòng ..
Sao chép một tập tin ..
Chương trình Python Đọc một dòng tệp từng dòng vào một danh sách ..
Nối vào một tập tin ..

Chủ đề