国际格式的电子邮件发件人/收件人

2024-09-29 23:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

有类似功能的severalexamples,我一直遵循这些指导原则,但这仍然不起作用。我正在尝试运行此测试脚本:

# -*- coding: utf-8 -*-

import smtplib
from   email.header         import Header
from   email.mime.multipart import MIMEMultipart
from   email.mime.text      import MIMEText

USERNAME   = 'you@gmail.com'
PASSWORD   = 'yourpass'
COMMASPACE = ', '
SERVER     = 'smtp.gmail.com:587'

def isallascii(str):
    '''Checks if all characters in string are ascii (useful for unicode related processing)'''
    return all(ord(c) < 128 for c in str)

def correct_headervalue(headervalue):
    return headervalue if isallascii(headervalue) else Header(headervalue, 'utf-8')

def addheader(msg, headername, headervalue):
    msg[headername] = correct_headervalue(headervalue)

def buildmsg(sender, receivers, subject, plainbody):
    receivers_str = COMMASPACE.join(receivers) if receivers else None
    msg = MIMEMultipart('alternative')
    addheader(msg, 'Subject', subject)
    addheader(msg, 'From',    sender)
    addheader(msg, 'To',      receivers_str)
    plaintext = MIMEText(plainbody,'plain') if isallascii(plainbody) else MIMEText(plainbody.encode('utf-8'), 'plain', 'utf-8')
    msg.attach(plaintext)
    return msg

smtpObj = smtplib.SMTP(SERVER)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.ehlo()
smtpObj.login(USERNAME, PASSWORD)
sender = 'Juan Pérez Castaña <juan.pérez.castaña@example.com>'
receivers = ['test1@example.com']
subject = 'A nice subject'
body = 'who cares'
message = buildmsg(sender, receivers, subject, body)
smtpObj.sendmail(sender, receivers, message.as_string())

但它正在抛出:

^{pr2}$

我没有得到的是,我已经正确地编码了头,但它仍然拒绝它们。我想知道是否还需要对传递给smtpObj.sendmailsenderreceivers)的参数进行编码。如果是,我该怎么做?在


Tags: fromimportcomifdefmsgsenderutf

热门问题