Python通用邮件发送[smtplib]
代码托管位置 github-pytools
需求
1.发送邮件
2.不需要登录任何邮箱等等
3.支持多接收人
4.支持附件
5.支持命令行+方法调用
基于版本
2.4 使用2.7和3.x的童鞋,可能需要修改下import信息
源代码
使用官网一份代码进行重新修改,扩增功能
代码托管地址 github-pytools
#!/usr/bin/env python
#@author : wklken@yeah.ent
#@version : 0.1
#@desc: for mail sending.
import smtplib
import getopt
import sys
import os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
import email.Encoders as encoders
def send_mail(mail_from, mail_to, subject, msg_txt, files=[]):
# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = mail_from
msg['To'] = mail_to
# Create the body of the message (a plain-text and an HTML version).
#text = msg
html = msg_txt
# Record the MIME types of both parts - text/plain and text/html.
#part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
#msg.attach(part1)
msg.attach(part2)
#attachment
for f in files:
#octet-stream:binary data
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)
# Send the message via local SMTP server.
s = smtplib.SMTP('localhost')
# sendmail function takes 3 arguments: sender's address, recipient's address
# and message to send - here it is sent as one string.
mailto_list = mail_to.strip().split(",")
if len(mailto_list) > 1:
for mailtoi in mailto_list:
s.sendmail(mail_from, mailtoi.strip(), msg.as_string())
else:
s.sendmail(mail_from, mail_to, msg.as_string())
s.quit()
return True
def main():
files = []
try:
opts, args = getopt.getopt(sys.argv[1:], "f:t:sⓜ️a:")
for op, value in opts:
if op == "-f":
mail_from = value
elif op == "-t":
mail_to = value
elif op == "-s":
subject = value
elif op == "-m":
msg_txt = value
elif op == "-a":
files = value.split(",")
except getopt.GetoptError:
print(sys.argv[0] + " : params are not defined well!")
print mail_from, mail_to, subject, msg_txt
if files:
send_mail(mail_from, mail_to, subject, msg_txt, files)
else:
send_mail(mail_from, mail_to, subject, msg_txt)
if __name__ == "__main__":
main()
使用
CMD:
./sendEmail.py -f "fromSomeOne@XXX.com" \
-t "toA@XXX.com,toB@XXX.com" \
-s "the subject of mail" \
-m "the mail Message.Main Content" \
-a "attachment1_path,attachment2_path"
IMPORT:
:::python
import sendEmail
sendEmail.send_mail(mail_from, mail_to, subject, msg_txt, files)
The end!
wklken
Blog: https://wklken.me
Email: wklken@yeah.net
2012-09-02