使用 smtplib 添加电子邮件附件
Adding email attachments using smtplib
我正在尝试发送电子邮件并附加一个 VCF 文件,但我 运行 遇到了一些麻烦。我已经成功发送纯文本电子邮件,没有任何问题,但这是我现在 运行 我的代码时遇到的错误:
AttributeError: 'file' object has no attribute 'rfind'
还有我的代码:
import vobject
import requests
import smtplib
from os.path import basename
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
j = vobject.vCard()
j.add('n')
j.n.value = vobject.vcard.Name(family='Harris', given='Jeffrey')
j.add('fn')
j.fn.value = 'Jeffrey Harris'
j.add('email')
j.email.value = 'jeffrey@osafoundation.org'
j.email.type_param = 'Internet'
k = j.serialize()
with open ('new.vcf', 'w') as file:
file.write(k)
with open('new.vcf', 'rb') as fil:
part = MIMEApplication(
fil.read(),
Name=basename(fil)
)
part['Content-Disposition'] = 'attachment; filename="%s"' % basename(fil)
msg = MIMEMultipart()
msg['From'] = 'me@myemail.com'
msg['To'] = 'me@myemail.com'
msg['Subject'] = 'test'
message = 'test'
msg.attach(part)
mailserver = smtplib.SMTP('secure.emailsrvr.com',587)
mailserver.ehlo()
mailserver.starttls()
mailserver.ehlo()
mailserver.login('me@myemail.com', 'mypassword')
mailserver.sendmail('me@myemail.com','me@myemail.com',msg.as_string())
mailserver.quit()
对我做错了什么有什么想法吗?
您的问题出在 Name=basename(fil)
,因为 basename()
接受 str
、bytes
或 os.PathLike
对象。
您正在尝试将 _io.BudderReader
作为参数传递。
解法:
您应该传递附件的 文件名(在 OP 情况下是 new.vcf
)。
我正在尝试发送电子邮件并附加一个 VCF 文件,但我 运行 遇到了一些麻烦。我已经成功发送纯文本电子邮件,没有任何问题,但这是我现在 运行 我的代码时遇到的错误:
AttributeError: 'file' object has no attribute 'rfind'
还有我的代码:
import vobject
import requests
import smtplib
from os.path import basename
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
j = vobject.vCard()
j.add('n')
j.n.value = vobject.vcard.Name(family='Harris', given='Jeffrey')
j.add('fn')
j.fn.value = 'Jeffrey Harris'
j.add('email')
j.email.value = 'jeffrey@osafoundation.org'
j.email.type_param = 'Internet'
k = j.serialize()
with open ('new.vcf', 'w') as file:
file.write(k)
with open('new.vcf', 'rb') as fil:
part = MIMEApplication(
fil.read(),
Name=basename(fil)
)
part['Content-Disposition'] = 'attachment; filename="%s"' % basename(fil)
msg = MIMEMultipart()
msg['From'] = 'me@myemail.com'
msg['To'] = 'me@myemail.com'
msg['Subject'] = 'test'
message = 'test'
msg.attach(part)
mailserver = smtplib.SMTP('secure.emailsrvr.com',587)
mailserver.ehlo()
mailserver.starttls()
mailserver.ehlo()
mailserver.login('me@myemail.com', 'mypassword')
mailserver.sendmail('me@myemail.com','me@myemail.com',msg.as_string())
mailserver.quit()
对我做错了什么有什么想法吗?
您的问题出在 Name=basename(fil)
,因为 basename()
接受 str
、bytes
或 os.PathLike
对象。
您正在尝试将 _io.BudderReader
作为参数传递。
解法:
您应该传递附件的 文件名(在 OP 情况下是 new.vcf
)。