0

如何指定远程附件文件包含在 SMTP 邮件中?附件文件位于不同的服务器上(自己的用户名/密码访问)

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
mail_content = """ This is body content """

sender_addr = "sender_addr@server.com"
sender_pass = "apassword"
receiver_addr = "receiver_addr@server.com"

# Create MIME header
msg = MIMEMultipart()
msg['From'] = sender_addr
msg['To'] = receiver_addr
msg['Subject'] = 'A test mail subject sent by Python'
msg.attach(MIMEText(mail_content, 'plain'))

fname = "doc_1.pdf"
attach_file = open(fname, 'rb')  # **<- How can I specify the remote path here?**
payload = MIMEBase('application', 'octet-stream')
# Attach an attachment to payload
payload.set_payload((attach_file).read())
encoders.encode_base64(payload)  

# Add payload header with filename
payload.add_header('Content-Disposition', 'attachment', filename=fname)
msg.attach(payload)

# Create SMTP client
client = smtplib.SMTP('smtp.gmail.com', 587) 
client.starttls()                              
client.login(sender_addr, sender_pass)      
text = msg.as_string()                     

client.sendmail(sender_addr, receiver_addr, text)
client.quit()
print('Mail sent!')
4

1 回答 1

0

https://www.rfc-editor.org/rfc/rfc2110#section-4.1解释了Content-Location:标题。

假设您要链接的内容在变量attach_uri中,例如

# Create MIME header
msg = MIMEMultipart()
msg['From'] = sender_addr
msg['To'] = receiver_addr
msg['Subject'] = 'A test mail subject sent by Python'
msg.attach(MIMEText(mail_content, 'plain'))

payload = MIMEBase('application', 'octet-stream')
payload.add_header('Content-Location', attach_uri)
msg.attach(payload)

如果您要询问如何从远程位置检索内容并将其包含在电子邮件中,这是一个相当广泛的话题;但假设您在 HTTP 服务器上有内容,请尝试类似

import requests

r = requests.get(attachment_uri)

payload.set_payload(r.content)

在你面前msg.attach(payload)

有了这个,应该不再需要将 URI 设置Content-Location:为原始 URI(为什么用户会关心它来自哪里?而且您不想透露密码等)。

于 2019-08-23T04:43:28.167 回答