Hướng dẫn merge mail program in python - hợp nhất chương trình thư trong python

Trong chương trình này, bạn sẽ học cách hợp nhất thư thành một.

Để hiểu ví dụ này, bạn nên có kiến ​​thức về các chủ đề lập trình Python sau:

  • Phương thức chuỗi
  • Tệp Python I/O

Khi chúng tôi muốn gửi lời mời tương tự cho nhiều người, cơ thể của thư không thay đổi. Chỉ có tên (và có thể địa chỉ) cần được thay đổi.

Hợp nhất thư là một quá trình làm điều này. Thay vì viết riêng từng thư, chúng tôi có một mẫu cho cơ thể của thư và một danh sách các tên mà chúng tôi hợp nhất với nhau để tạo thành tất cả các thư.

Mã nguồn để hợp nhất thư

# Python program to mail merger
# Names are in the file names.txt
# Body of the mail is in body.txt

# open names.txt for reading
with open("names.txt", 'r', encoding='utf-8') as names_file:

    # open body.txt for reading
    with open("body.txt", 'r', encoding='utf-8') as body_file:

        # read entire content of the body
        body = body_file.read()

        # iterate over names
        for name in names_file:
            mail = "Hello " + name.strip() + "\n" + body

            # write the mails to individual files
            with open(name.strip()+".txt", 'w', encoding='utf-8') as mail_file:
                mail_file.write(mail)

Đối với chương trình này, chúng tôi đã viết tất cả các tên trong các dòng riêng biệt trong tệp "name.txt". Cơ thể nằm trong tệp "body.txt".

Chúng tôi mở cả hai tệp ở chế độ đọc và lặp qua từng tên bằng cách sử dụng vòng lặp

#name,email,score
Alex,,79
Ann,,98
0. Một tệp mới có tên "[name] .txt" được tạo, trong đó tên là tên của người đó.

Chúng tôi sử dụng phương pháp

#name,email,score
Alex,,79
Ann,,98
1 để làm sạch các không gian trắng dẫn đầu và theo dõi (đọc một dòng từ tệp cũng đọc ký tự '\ n' mới). Cuối cùng, chúng tôi viết nội dung của thư vào tệp này bằng phương thức
#name,email,score
Alex,,79
Ann,,98
2.

Tìm hiểu thêm về các tập tin trong Python.

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:

Hướng dẫn merge mail program in python - hợp nhất chương trình thư trong python

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:

  • #name,email,score
    Alex,,79
    Ann,,98
    3 - 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ủ đề
  • #name,email,score
    Alex,,79
    Ann,,98
    4 - Chi tiết người nhận để thay thế người giữ chỗ
  • ________ 15 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

#name,email,score
Alex,,79
Ann,,98
6Command để 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:

Hướng dẫn merge mail program in python - hợp nhất chương trình thư trong python

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:

#name,email,score
Alex,,79
Ann,,98
7, chọn
#name,email,score
Alex,,79
Ann,,98
8 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;

Hướng dẫn merge mail program in python - hợp nhất chương trình thư trong python

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!

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 ..

Làm thế nào để bạn hợp nhất các chương trình trong Python?

Sau đây là các bước để hợp nhất ...
Mở tệp1.TXT và FILE2.txt trong chế độ đọc ..
Mở File3.TXT trong chế độ ghi ..
Đọc dữ liệu từ File1 và thêm nó vào một chuỗi ..
Đọc dữ liệu từ File2 và nối dữ liệu của tệp này đến chuỗi trước ..
Viết dữ liệu từ chuỗi đến File3 ..
Đóng tất cả các tệp ..

Mail hợp nhất trong Word là gì?

Mail Hợp nhất cho phép bạn tạo một loạt các tài liệu được cá nhân hóa cho mỗi người nhận.Ví dụ, một chữ cái biểu mẫu có thể được cá nhân hóa để giải quyết từng người nhận theo tên.Một nguồn dữ liệu, như một danh sách, bảng tính hoặc cơ sở dữ liệu, được liên kết với tài liệu.lets you create a batch of documents that are personalized for each recipient. For example, a form letter might be personalized to address each recipient by name. A data source, like a list, spreadsheet, or database, is associated with the document.