分享

Python 通用邮件发送(smtplib)

 shanyuxiyun 2016-01-12

(点击上方公号,可快速关注)


作者:伯乐在线 - wklken

链接:http://python./83719/


使用到的模块 smtplib, email


代码托管位置 github-pytools(https://github.com/wklken/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:m: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()


使用


./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:


import sendEmail

sendEmail.send_mail(mail_from, mail_to, subject, msg_txt, files)


The end!



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多