python邮件添加附件_Python 发送邮件可以添加附件

#!/usr/bin/python

from email.MIMEText import MIMEText

from email.MIMEMultipart import MIMEMultipart

from email.MIMEBase import MIMEBase

from email import Utils, Encoders

import mimetypes, sys,smtplib,socket,getopt

class SendMail:

def __init__(self,smtp_server,from_addr,to_addr,user,passwd):

self.mailserver=smtp_server

self.from_addr=from_addr

self.to_addr=to_addr

self.username=user

self.password=passwd

def attachment(self,filename):

fd=open(filename,'rb')

filename=filename.split('/')

mimetype,mimeencoding=mimetypes.guess_type(filename[-1])

if (mimeencoding is None) or (mimetype is None):

mimetype='application/octet-stream'

maintype,subtype=mimetype.split('/')

if maintype=='text':

retval=MIMEText(fd.read(), _subtype=subtype, _charset='utf-8')

else:

retval=MIMEBase(maintype,subtype)

retval.set_payload(fd.read())

Encoders.encode_base64(retval)

retval.add_header('Content-Disposition','attachment',filename=filename[-1])

fd.close()

return retval

def msginfo(self,msg,subject,filename):

# message = """Hello, ALL

#This is test message.

#--Anonymous"""

message=msg

msg=MIMEMultipart()

msg['To'] = self.to_addr

msg['From'] = 'sa '

msg['Date'] = Utils.formatdate(localtime=1)

msg['Message-ID'] = Utils.make_msgid()

if subject:

msg['Subject'] = subject

if message:

body=MIMEText(message,_subtype='plain')

msg.attach(body)

#for filename in sys.argv[1:]:

if filename:

msg.attach(self.attachment(filename))

return msg.as_string()

def send(self,msg=None,subject=None,filename=None):

try:

s=smtplib.SMTP(self.mailserver)

try:

s.login(self.username,self.password)

except smtplib.SMTPException,e:

print "Authentication failed:",e

sys.exit(1)

s.sendmail(self.from_addr,self.to_addr.split(','),self.msginfo(msg,subject,filename))

except (socket.gaierror,socket.error,socket.herror,smtplib.SMTPException),e:

print "*** Your message may not have been sent!"

print e

sys.exit(2)

else:

print "Message successfully sent to %d recipient(s)" %len(self.to_addr)

if __name__=='__main__':

def usage():

print """Useage:%s [-h] -s -f -t -u -p [-S -m -F ]

Mandatory arguments to long options are mandatory for short options too.

-f, --from= Sets the name of the "from" person (i.e., the envelope sender of the mail).

-t, --to= Addressee's address. -t "[email protected],[email protected]".

-u, --user= Login SMTP server username.

-p, --pass= Login SMTP server password.

-S, --subject= Mail subject.

-m, --msg= Mail message.-m "msg, ......."

-F, --file= Attachment file name.

-h, --help Help documen.

""" %sys.argv[0]

sys.exit(3)

try:

options,args=getopt.getopt(sys.argv[1:],"hs:f:t:u:p:S:m:F:","--help --server= --from= --to= --user= --pass= --subject= --msg= --file=",)

except getopt.GetoptError:

usage()

sys.exit(3)

server=None

from_addr=None

to_addr=None

username=None

password=None

subject=None

filename=None

msg=None

for name,value in options:

if name in ("-h","--help"):

usage()

if name in ("-s","--server"):

server=value

if name in ("-f","--from"):

from_addr=value

if name in ("-t","--to"):

to_addr=value

if name in ("-u","--user"):

username=value

if name in ("-p","--pass"):

password=value

if name in ("-S","--subject"):

subject=value

if name in ("-m","--msg"):

msg=value

if name in ("-F","--file"):

filename=value

if server and from_addr and to_addr and username and password:

test=SendMail(server,from_addr,to_addr,username,password)

test.send(msg,subject,filename)

else:

usage()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值