Home Backend Development Python Tutorial Python uses SMTP to send emails

Python uses SMTP to send emails

May 24, 2017 pm 02:23 PM

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

Python创建 SMTP 对象语法如下:

1

2

3

import smtplib

  

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

Copy after login

参数说明:

host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如:ziqiangxuetang.com,这个是可选参数。

port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下SMTP端口号为25。

local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为 localhost 即可。

Python SMTP对象使用sendmail方法发送邮件,语法如下:

1

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

Copy after login

参数说明:

from_addr: 邮件发送者地址。

to_addrs: 字符串列表,邮件发送地址。

msg: 发送消息

这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

实例

以下是一个使用Python发送邮件简单的实例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#!/usr/bin/python

  

import smtplib

  

sender = 'from@fromdomain.com'

receivers = ['to@todomain.com']

  

message = """From: From Person <from@fromdomain.com>

To: To Person <to@todomain.com>

Subject: SMTP e-mail test

  

This is a test e-mail message.

"""

  

try:

   smtpObj = smtplib.SMTP('localhost')

   smtpObj.sendmail(sender, receivers, message)        

   print "Successfully sent email"

except SMTPException:

   print "Error: unable to send email"

Copy after login

使用Python发送HTML格式的邮件

Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html。具体代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import smtplib 

from email.mime.text import MIMEText 

mailto_list=["YYY@YYY.com"]

mail_host="smtp.XXX.com"  #设置服务器

mail_user="XXX"    #用户名

mail_pass="XXXX"   #口令

mail_postfix="XXX.com"  #发件箱的后缀

   

def send_mail(to_list,sub,content):  #to_list:收件人;sub:主题;content:邮件内容

    me="hello"+"<"+mail_user+"@"+mail_postfix+">"   #这里的hello可以任意设置,收到信后,将按照设置显示

    msg = MIMEText(content,_subtype='html',_charset='gb2312')    #创建一个实例,这里设置为html格式邮件

    msg['Subject'] = sub    #设置主题

    msg['From'] = me 

    msg['To'] = ";".join(to_list) 

    try

        s = smtplib.SMTP() 

        s.connect(mail_host)  #连接smtp服务器

        s.login(mail_user,mail_pass)  #登陆服务器

        s.sendmail(me, to_list, msg.as_string())  #发送邮件

        s.close() 

        return True 

    except Exception, e: 

        print str(e) 

        return False 

if __name__ == '__main__': 

    if send_mail(mailto_list,"hello","<a href='http://www.cnblogs.com/xiaowuyi'>小五义</a>"): 

        print "发送成功" 

    else

        print "发送失败"

Copy after login

或者你也可以在消息体中指定Content-type为text/html,如下实例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#!/usr/bin/python

import smtplib

  

message = """From: From Person <from@fromdomain.com>

To: To Person <to@todomain.com>

MIME-Version: 1.0

Content-type: text/html

Subject: SMTP HTML e-mail test

  

This is an e-mail message to be sent in HTML format

  

<b>This is HTML message.</b>

<h1>This is headline.</h1>

"""

  

try:

   smtpObj = smtplib.SMTP('localhost')

   smtpObj.sendmail(sender, receivers, message)        

   print "Successfully sent email"

except SMTPException:

   print "Error: unable to send email"

Copy after login

Python发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

1

2

3

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import smtplib

Copy after login

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#创建一个带附件的实例

msg = MIMEMultipart()

#构造附件1

att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312')

att1["Content-Type"] = 'application/octet-stream'

att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字

msg.attach(att1)

  

#构造附件2

att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312')

att2["Content-Type"] = 'application/octet-stream'

att2["Content-Disposition"] = 'attachment; filename="123.txt"'

msg.attach(att2)

  

#加邮件头

msg['to'] = 'YYY@YYY.com'

msg['from'] = 'XXX@XXX.com'

msg['subject'] = 'hello world'

#发送邮件

try:

    server = smtplib.SMTP()

    server.connect('smtp.XXX.com')

    server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码

    server.sendmail(msg['from'], msg['to'],msg.as_string())

    server.quit()

    print '发送成功'

except Exception, e: 

    print str(e)

Copy after login

以下实例指定了Content-type header 为 multipart/mixed,并发送/tmp/test.txt 文本文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

#!/usr/bin/python

  

import smtplib

import base64

  

filename = "/tmp/test.txt"

  

# 读取文件内容并使用 base64 编码

fo = open(filename, "rb")

filecontent = fo.read()

encodedcontent = base64.b64encode(filecontent)  # base64

  

sender = 'webmaster@tutorialpoint.com'

reciever = 'amrood.admin@gmail.com'

  

marker = "AUNIQUEMARKER"

  

body ="""

This is a test email to send an attachement.

"""

# 定义头部信息

part1 = """From: From Person <me@fromdomain.net>

To: To Person <amrood.admin@gmail.com>

Subject: Sending Attachement

MIME-Version: 1.0

Content-Type: multipart/mixed; boundary=%s

--%s

""" % (marker, marker)

  

# 定义消息动作

part2 = """Content-Type: text/plain

Content-Transfer-Encoding:8bit

  

%s

--%s

""" % (body,marker)

  

# 定义附近部分

part3 = """Content-Type: multipart/mixed; name=\"%s\"

Content-Transfer-Encoding:base64

Content-Disposition: attachment; filename=%s

  

%s

--%s--

""" %(filename, filename, encodedcontent, marker)

message = part1 + part2 + part3

  

try:

   smtpObj = smtplib.SMTP('localhost')

   smtpObj.sendmail(sender, reciever, message)

   print "Successfully sent email"

except Exception:

   print "Error: unable to send email"

Copy after login

【相关推荐】

1. 详细介绍Python使用SMTP发送邮件实例

2. Python 使用SMTP发送邮件的代码小结

3. c#调用qq邮箱smtp发送邮件修改版代码

4. 分享Python实现SMTP发送邮件图文实例

5. php smtp发送邮件

6. Python SMTP邮件模块详解

7. python smtplib模块发送SSL/TLS安全邮件实例

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to download deepseek Xiaomi How to download deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

How to download deepseek Xiaomi

What are the advantages and disadvantages of templating? What are the advantages and disadvantages of templating? May 08, 2024 pm 03:51 PM

What are the advantages and disadvantages of templating?

Google AI announces Gemini 1.5 Pro and Gemma 2 for developers Google AI announces Gemini 1.5 Pro and Gemma 2 for developers Jul 01, 2024 am 07:22 AM

Google AI announces Gemini 1.5 Pro and Gemma 2 for developers

For only $250, Hugging Face's technical director teaches you how to fine-tune Llama 3 step by step For only $250, Hugging Face's technical director teaches you how to fine-tune Llama 3 step by step May 06, 2024 pm 03:52 PM

For only $250, Hugging Face's technical director teaches you how to fine-tune Llama 3 step by step

Share several .NET open source AI and LLM related project frameworks Share several .NET open source AI and LLM related project frameworks May 06, 2024 pm 04:43 PM

Share several .NET open source AI and LLM related project frameworks

A complete guide to golang function debugging and analysis A complete guide to golang function debugging and analysis May 06, 2024 pm 02:00 PM

A complete guide to golang function debugging and analysis

How do you ask him deepseek How do you ask him deepseek Feb 19, 2025 pm 04:42 PM

How do you ask him deepseek

How to save the evaluate function How to save the evaluate function May 07, 2024 am 01:09 AM

How to save the evaluate function

See all articles