05月10, 2018

CentOS下Python实现邮件发送功能

本文主要记录Python发送邮件时常见的两种方法

1、使用CentOS系统的Sendmail服务发送

  • 优点
    • 不用登陆
    • 没有第三方平台的邮件发送条数限制
  • 缺点
    • 不能接收邮件回复
  • 使用方法
    • 1、安装Sendmail服务
      yum -y install sendmail
      
    • 2、开启Sendmail服务
      service sendmail start
      
    • 3、实现邮件发送功能
      from email.mime.text import MIMEText
      from subprocess import Popen,PIPE
      def sendmail(sender, recevier, subject, content):
          msg = MIMEText(content, 'html', 'utf-8')
          msg["From"] = sender
          msg["To"] = recevier
          msg["Subject"] = subject
          p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE)
          p.communicate(msg.as_string())
      sendmail("sender@xxxx.com","recevier1@xxxx.com,recevier2@xxxx.com","title", "content")
      
      PS.sendmail方法接收四个参数:发件人邮箱(可以是任意邮箱地址),收件人邮箱(群发中间用,分割邮箱地址),邮件主题,邮件内容

2、使用第三方邮件服务商发送

  • 优点
    • 邮件收发功能都完善
  • 缺点
    • 邮件服务商对发件数量有限制
  • 使用方法

    • 1、准备好发送邮件功能所需的第三方服务商信息
      • ①、第三方服务商的发送邮件服务器(如腾讯企业邮的smtp.exmail.qq.com)
      • ②、第三方服务商的发送邮件端口(如腾讯企业邮开启SSL时是465,不使用SSL时是25)
      • ③、使用第三方服务商时的邮箱账号及密码
    • 2、实现邮件发送功能:

      import smtplib
      import email.mime.multipart
      import email.mime.text
      
      def sendmail(smtpconfig, recevier, subject, content):
          msg = email.mime.multipart.MIMEMultipart()
          msg['Subject'] = subject
          msg['From'] = smtpconfig['user']
          msg['To'] = recevier
          txt = email.mime.text.MIMEText(content, _charset='utf-8')
          msg.attach(txt)
          mailserver = smtpconfig['server']
          mailport = int(smtpconfig['port'])
          mailuser = smtpconfig['user']
          mailpwd = smtpconfig['password']
          smtp = smtplib.SMTP()
          smtp.connect(mailserver, mailport)
          smtp.login(mailuser, mailpwd)
          smtp.sendmail(msg['From'], msg['To'], msg.as_string())
          smtp.quit()
      
      smtpconfig = {
          'server':'smtp.exmail.qq.com',
          'port':'25',
          'user':'mailuser',
          'password':'mailpassword',
      }
      sendmail(smtpconfig,"recevier1@xxxx.com,recevier2@xxxx.com","title", "content")
      

      PS.sendmail方法没有使用sender参数是因为这个时候的from必须与smtpconfig中user的值一致,所以就省略了。

以上就是两种简单的发送邮件的方法,文章中提供的方法都是简单直接的使用方法,没有任何异常处理逻辑,需要的同学可以自己加上,有任何问题欢迎文章下留言也可以直接通过邮件联系我。

本文链接:https://www.shaobin.wang/post/30.html

Comments