带有附件且发件人显示名称(或电子邮件)中带有变音符号的电子邮件

问题描述 投票:0回答:1

我正在尝试通过 python 发送带有附件的电子邮件,但当显示名称(或电子邮件)包含德语元音变音“äöü”时,我从发送服务器收到错误消息,表明该电子邮件不符合 RFC 5321/5322 。没有它们,邮件发送工作正常。 我检查了其他几个问题,但他们的问题不在发件人中或没有发送附件,因此这些解决方案不适用于我的案例。

最小工作示例(很好,不工作,但如果从“显示名称”中删除“ö”,则可以工作;登录/密码丢失并且电子邮件地址由于明显原因而更改),我在 Windows 上使用 python 3.11:

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

message = MIMEMultipart()
message.set_charset('utf-8')
subject = 'Support-Nr. 1'
message["Subject"] = subject
body = 'testmail 123 äöüß'
message.attach(MIMEText(body, "plain"))
filename = 'VCARD_A & B.vcf'
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}",
)
message.attach(part)
sender_email = '[email protected]'
receiver_email = '[email protected]'
displayname = 'Höhne'
message["From"] = displayname + '<' + sender_email + '>'
message["To"] = receiver_email
smtplogin = #loginname
smtppassword = #passwort
smtpserver = 'smtp.ionos.de'
smtpport = 465
context = ssl._create_unverified_context()
with smtplib.SMTP_SSL(smtpserver, smtpport, context=context) as server:
    server.login(smtplogin, smtppassword)
    server.sendmail(sender_email, receiver_email, message.as_string())

python python-3.x email utf-8 email-attachments
1个回答
0
投票

对于寻找解决方案的其他人,我在 python 文档 上找到了一个有效的示例。

import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg['Subject'] = 'Support-Nr. 1'
sender_email = '[email protected]'
receiver_email = '[email protected]'
displayname = 'Höhne'
msg['From'] = displayname + '<' + sender_email + '>'
msg['To'] = receiver_email
msg.preamble = 'You will not see this in a MIME-aware mail reader.\n'
with open('VCARD_A & B.vcf', 'rb') as fp:
    img_data = fp.read()
    file_name = fp.name
msg.add_attachment(img_data, maintype='application', subtype='octet-stream', filename=file_name)
smtplogin = #loginname
smtppassword = #password
smtpserver = 'smtp.ionos.de'
smtpport = 465
context = ssl._create_unverified_context()
with smtplib.SMTP_SSL(smtpserver, smtpport, context=context) as s:
    s.login(smtplogin, smtppassword)
    s.send_message(msg)
© www.soinside.com 2019 - 2024. All rights reserved.