为什么我无法使用Python3发送带有excel附件的电子邮件
我认为问题在于参数为什么我无法使用Python3发送带有excel附件的电子邮件,python,python-3.x,smtplib,Python,Python 3.x,Smtplib,我认为问题在于参数server=…我应该在这里放什么 import smtplib import os from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.mime.text import MIMEText from email.utils import COMMASPACE, formatdate from email import encoders d
server=…
我应该在这里放什么
import smtplib
import os
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
from email import encoders
def send_mail(send_from, send_to, subject, text, files=[], server=r'\\myserver\User\name\PythonProject\'):
assert type(send_to)==['sendto@.com']
assert type(files)==['File Name.xlsx']
msg = MIMEMultipart()
msg['From'] = "sendfrom@.com"
msg['To'] = COMMASPACE.join(send_to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach( MIMEText(text) )
for f in files:
part = MIMEBase('application', "octet-stream")
part.set_payload( open(files,"rb").read() )
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
msg.attach(part)
smtp = smtplib.SMTP('1.1.1.1: 25')
smtp.sendmail(send_from, send_to, msg.as_string())
smtp.close()
此代码有许多问题
- 函数签名中服务器的默认值
- 字符串以
结尾,它转义结束引号:删除它或转义它(“r”前缀转义字符串内部的反斜杠,但终端反斜杠被解释为转义结束引号,因此在字符串外部)\'
未在函数中使用服务器
- 字符串以
- 使用like
通常是个坏主意;最好使用files=[]
并在尝试迭代代码之前检查代码中的值files=None
语句不起作用。assert
- 使用而不是
检查对象类型类型
- 使用而不是
正在尝试打开文件列表,它只需要打开循环中的当前文件:part.set\u有效载荷(open(files,“rb”).read()
open(f,…)
def send_mail(
send_from,
send_to,
subject,
text,
files=None,
server=r"\\myserver\User\name\PythonProject\\",
):
assert isinstance(send_to, list)
assert isinstance(files, list)
msg = MIMEMultipart()
msg["From"] = "sendfrom@.com"
msg["To"] = COMMASPACE.join(send_to)
msg["Date"] = formatdate(localtime=True)
msg["Subject"] = subject
msg.attach(MIMEText(text))
if files is not None:
for f in files:
part = MIMEBase("application", "octet-stream")
part.set_payload(open(f, "rb").read())
encoders.encode_base64(part)
part.add_header(
"Content-Disposition", 'attachment; filename="%s"' % os.path.basename(f)
)
msg.attach(part)
smtp = smtplib.SMTP('1.1.1.1:25')
smtp.sendmail(send_from, send_to, msg.as_string())
smtp.close()