使用变量作为数据容器在邮件中发送附件 python
Sending an attachment in mail using a variable as data container python
我想知道是否可以使用 python 将变量(例如字符串)作为邮件附件发送。目的是避免在这个过程中制作临时文件。
例如,我想发送一个格式为 csv 的字符串作为邮件的附件,并且可能稍后可以将该附件作为文件下载到隧道的另一端。
感谢您提供的所有帮助。
编辑:它现在可以与 StringIO 一起使用,感谢您的帮助。下面回答
所以这是我现在使用的工作方法:
#!/usr/bin/python2.7.x
# -*- coding: utf-8 -*-
#Imports
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders
from email.Utils import COMMASPACE, formatdate
import sys
try:
from StringIO import StringIO
except:
print("Could not import critical library StringIO")
sys.exit(0)
import smtplib
import datetime
def run_mail(self):
date = datetime.datetime.now()
dateAAAAMMDD = str(date.year) + "_" + str( date.month) + "_" +str( date.day)
pj1 = StringIO(self.pj1_data)
pj1_name = "my_att_name_" + str(dateAAAAMMDD) + ".csv"
pj2 = StringIO(self.pj2_data)
pj2_name = "my_att_name2_" + str(dateAAAAMMDD) + ".txt"
pj3 = StringIO(self.pj3_data)
pj3_name = "my_att_name3_" + str(dateAAAAMMDD) + ".txt"
pj =[(pj1,pj1_name), (pj2,pj2_name), (pj3,pj3_name)]
fromaddr = 'address@something.com'
toaddr = 'toanotheraddress@something.com'
msg = MIMEMultipart()
subject = 'subject dated ' + dateAAAAMMDD
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = subject
msg.attach(MIMEText("Auto-generated script", 'plain'))
for data, att_name in pj :
part = MIMEBase('application', 'octet-stream')
part.set_payload(data.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename= "%s"' % att_name)
msg.attach(part)
server_port = 25
server = smtplib.SMTP('myserver.com',server_port)
server.starttls()
#If login required, not very secure, use either input or localhost without
#login required
server.login(fromaddr, 'MyPasswordGoesHere')
content = msg.as_string()
server.sendmail(fromaddr,toaddr,content)
server.quit()
我想知道是否可以使用 python 将变量(例如字符串)作为邮件附件发送。目的是避免在这个过程中制作临时文件。
例如,我想发送一个格式为 csv 的字符串作为邮件的附件,并且可能稍后可以将该附件作为文件下载到隧道的另一端。
感谢您提供的所有帮助。
编辑:它现在可以与 StringIO 一起使用,感谢您的帮助。下面回答
所以这是我现在使用的工作方法:
#!/usr/bin/python2.7.x
# -*- coding: utf-8 -*-
#Imports
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders
from email.Utils import COMMASPACE, formatdate
import sys
try:
from StringIO import StringIO
except:
print("Could not import critical library StringIO")
sys.exit(0)
import smtplib
import datetime
def run_mail(self):
date = datetime.datetime.now()
dateAAAAMMDD = str(date.year) + "_" + str( date.month) + "_" +str( date.day)
pj1 = StringIO(self.pj1_data)
pj1_name = "my_att_name_" + str(dateAAAAMMDD) + ".csv"
pj2 = StringIO(self.pj2_data)
pj2_name = "my_att_name2_" + str(dateAAAAMMDD) + ".txt"
pj3 = StringIO(self.pj3_data)
pj3_name = "my_att_name3_" + str(dateAAAAMMDD) + ".txt"
pj =[(pj1,pj1_name), (pj2,pj2_name), (pj3,pj3_name)]
fromaddr = 'address@something.com'
toaddr = 'toanotheraddress@something.com'
msg = MIMEMultipart()
subject = 'subject dated ' + dateAAAAMMDD
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = subject
msg.attach(MIMEText("Auto-generated script", 'plain'))
for data, att_name in pj :
part = MIMEBase('application', 'octet-stream')
part.set_payload(data.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename= "%s"' % att_name)
msg.attach(part)
server_port = 25
server = smtplib.SMTP('myserver.com',server_port)
server.starttls()
#If login required, not very secure, use either input or localhost without
#login required
server.login(fromaddr, 'MyPasswordGoesHere')
content = msg.as_string()
server.sendmail(fromaddr,toaddr,content)
server.quit()