当前位置:首页 > 开发 > 编程语言 > Python > 正文

Python发送邮件

发表于: 2012-12-18   作者:hotsunshine   来源:转载   浏览次数:
摘要: 一、直接调用命令行发送邮件(以及shell中sendEmail) 问题:主题为中文时乱码 主题乱码,网上找了很多,基本上可以确认是头文件编码的问题,通过对主题进行base64编码可以解决这个问题,实现如下: # 发送email,username用户名,subject主题,text内容 def send_email(self,username,subj
一、直接调用命令行发送邮件(以及shell中sendEmail)
问题:主题为中文时乱码

主题乱码,网上找了很多,基本上可以确认是头文件编码的问题,通过对主题进行base64编码可以解决这个问题,实现如下:

      # 发送email,username用户名,subject主题,text内容
      def send_email(self,username,subject,text):
          # 邮件内容为utf-8格式
          text = text.encode('utf-8')
          # 主题需要进行base64编码在转成utf8,注意后面这个strip,否则又出现一个换行符
          subject = "=?UTF-8?B?%s?=" % base64.encodestring(subject).strip()
          cmd = "/usr/bin/sendEmail -f test@yoursite.com -t %s  -o message-charset=utf-8 -u \"%s\"  -m \"%s\" " % (username,subject,text)
          try:
              rt = os.popen(cmd).read().split()
              return True
          except Exception,e:
              return False


直接用shell发送邮件的代码如下
subject=`echo -n 任务异常 | base64`
test_time=20130123
sendEmail -f aaa@xxx.com -t target@target.com  -o message-charset=utf-8 -u "=?UTF-8?B?${subject}?="  -m "已经存在任务,${test_time}的任务取消进行"


补充:  正文的换行符是
 \n


如果是ssh调用其他的邮件服务器来发邮件,命令要ssh命令要用双引号括起来,否则换行字符不识别
 ssh root@**** "sendemai -o ...."


二、使用SMTP协议发送邮件

        newusers = 'aaaaaa@xxx.com;cccc@xx.com'
        newccs  = 'bbbbb@xxx.com;adfadf@xxx.com'
        text = '测试邮件'

        mail_host = 'smtp.xxx.com'
        mail_user = 'xxx_service'
        mail_user_full = 'xxx_service@xxx.com'
        mail_pwd = '密码'
        mail_bcc = ''

        #表头信息
        msg = MIMEText(text,'base64', 'utf-8')
        msg['From'] = mail_user_full
        msg['Subject'] = subject
        msg['To'] = newusers
        msg['Cc'] = newccs
        msg['Bcc'] = ''

        
        try:
            s = smtplib.SMTP()
            s.connect(mail_host,'25')
            #login
            s.login(mail_user,mail_pwd)
            #send mail
            print newusers
            print newccs
            print msg.as_string()
            #  邮件人发送和抄送统一放在一起发送,需要在上面的标头信息中进行区分
s.sendmail(mail_user_full,newusers.split(';')+newccs.split(';')+mail_bcc.split(";"),msg.as_string())
            s.close()
            print 'success'
            # print rt
            return True
        except Exception,e:
            # print 'email error'
            print e
            return False

Python发送邮件

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
摘要: 平时运行一些脚本,需要把结果发送到邮箱,可以用python来处理,如下: 1,有邮件服务器: #
最近在做一个监控程序,需要用邮件发送告警。以前是使用注册的免费邮来发送,但是这样不免有很多限
犹豫和反复浪费了大量时间。 与朋友言 在完成一个邮件发送程序之前我根本不明白什么是邮件,哪怕已
下载 smtplib.py或smtplib.py 下载email-6.0.0a1.tar.gz 或Mail-2.1.0.tar.gz 安装: $ tar zxvf em
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮
用python的smtplib发送使用dkim签名的电子邮件 « Xiaoxia[PG] 用python的smtplib发送使用dkim签名的
关于Email的预备知识: 原贴地址:http://www.cnblogs.com/lonelycatcher/archive/2012/02/09/23434
import smtplib from_email="from_eamil@163.com" to_email="to_eamil@163.com" message="""From:%s
之前已经看到,如果消息包指定了他们之间的关系,增加一个文件进去,邮箱就会显示成普通附件 但是那
之前已经看到,如果消息包指定了他们之间的关系,增加一个文件进去,邮箱就会显示成普通附件 但是那
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号