使用python SMTP/IMAP在多个用户之间来回创建电子邮件对话

使用python SMTP/IMAP在多个用户之间来回创建电子邮件对话,python,email,smtp,imap,Python,Email,Smtp,Imap,我需要编写一个python脚本来自动回复邮件,我希望它的行为类似于gmail中的邮件线程,其中回复邮件与原始收到的邮件链接。我不想发送单独的邮件或新邮件作为答复 有人能帮我吗?你可以用Pythonssmtplibmodule发送电子邮件email模块支持HTML电子邮件。我在过去的一个教程中写了一个小脚本,可能会对你有所帮助。该脚本连接到gmail smtp端口并登录到电子邮件帐户,然后发送电子邮件 import smtplib, ssl, email, random from email.mi

我需要编写一个python脚本来自动回复邮件,我希望它的行为类似于gmail中的邮件线程,其中回复邮件与原始收到的邮件链接。我不想发送单独的邮件或新邮件作为答复


有人能帮我吗?

你可以用Pythons
smtplib
module发送电子邮件
email
模块支持HTML电子邮件。我在过去的一个教程中写了一个小脚本,可能会对你有所帮助。该脚本连接到gmail smtp端口并登录到电子邮件帐户,然后发送电子邮件

import smtplib, ssl, email, random
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

# set the port and the server adres
smtp_server = "smtp.gmail.com"
port = 587

# Sender email details, this is from where the email is send
sender_email = "<YOUR_EMAIL>"
sender_email_password = "<PASSWORD>"

# This where the email goes to
receiver_email = "<EMAIL>"
# The name is taken from the first part of the email adres, before the '@'-sign
name = receiver_email.split("@")[0] 

# Generate the message
message = MIMEMultipart("alternative")
message["Subject"] = str(random.randint(0,1000))
message["From"] = sender_email
message["To"] = receiver_email

# alternative text
text = "Hi there {}, How are you!".format(name)

# Fancy HTML email
html = "<h1>Hi there {}, How are you!!!!</h1>".format(name)

# Set a document as attachment, needs to be in the same directory
filename = "document.txt"


with open(filename, "rb") as attachment:
   part = MIMEBase("application", "octet-stream")
   part.set_payload(attachment.read())

encoders.encode_base64(part)

part.add_header(
   "Content-Disposition",
   f"attachment; filename= {filename}",
)


part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

message.attach(part1)
message.attach(part2)
message.attach(part)

context = ssl.create_default_context()

# Send the email
try:
    server = smtplib.SMTP(smtp_server, port)
    server.ehlo()
    server.starttls(context = context)
    server.ehlo()
    server.login(sender_email, sender_email_password)
    server.sendmail(sender_email, receiver_email, str(message))
except Exception as e:
    print(e)
finally:
    server.quit()
导入smtplib、ssl、电子邮件、随机
从email.mime.text导入MIMEText
从email.mime.multipart导入MIMEMultipart
从email.mime.base导入MIMEBase
从电子邮件导入编码器
#设置端口和服务器地址
smtp_server=“smtp.gmail.com”
端口=587
#发件人电子邮件详细信息,这是发送电子邮件的来源
发件人_email=“”
发件人\u电子邮件\u密码=“”
#这是电子邮件的目的地
接收者_email=“”
#该名称取自电子邮件地址的第一部分,在“@”符号之前
name=收件人\电子邮件拆分(“@”)[0]
#生成消息
消息=MIMEMultipart(“备选方案”)
消息[“主题”]=str(random.randint(01000))
消息[“发件人”]=发件人\电子邮件
信息[“收件人”]=收件人的电子邮件
#备选案文
text=“你好{},你好!”。格式(名称)
#花式HTML电子邮件
html=“你好{},你好!!!!”。格式(名称)
#将文档设置为附件,需要位于同一目录中
filename=“document.txt”
以open(文件名“rb”)作为附件:
部分=MIMEBase(“应用程序”、“八位字节流”)
part.set_有效载荷(附件.read())
编码器。编码_base64(部分)
part.add_标题(
“内容处置”,
f“附件;文件名={filename}”,
)
第1部分=MIMEText(文本,“纯”)
part2=MIMEText(html,“html”)
附文(第一部分)
附文(第二部分)
信息。附加(部分)
context=ssl.create\u default\u context()
#发送电子邮件
尝试:
服务器=smtplib.SMTP(SMTP_服务器,端口)
server.ehlo()
server.starttls(context=context)
server.ehlo()
服务器登录(发件人电子邮件、发件人电子邮件密码)
server.sendmail(发送者电子邮件、接收者电子邮件、str(消息))
例外情况除外,如e:
打印(e)
最后:
server.quit()

线程中的消息使用
回复
标题链接,该标题包含您回复的消息的消息ID。它们仍然是独立的邮件。@Barmar我在回复标题和邮件ID时使用了它。它以相同的邮件ID继续对话,但它不像普通的回复邮件线程,在该线程中,每个回复都会附带上一封邮件的正文。您需要将上一封邮件复制到回复正文中,就像普通邮件客户端一样。如何获取以前的邮件内容@Barmar reply[“Body”]=previousmsg[“message”]?比这更复杂。您需要获取上一条消息的正文,然后将新的消息正文格式化为“+previousmsg[“body”]”,如上所述。您还需要在上一条消息的每一行前面加上一个