Latest web development tutorials

Python3 SMTP для отправки почты

SMTP (простой протокол передачи почты), который является протокол Simple Mail Transfer, которая представляет собой набор правил для передачи сообщений от источника к пункту назначения, который он должен контролировать, как буквы транзита.

smtplib питона обеспечивает очень удобный способ для отправки по электронной почте. Это протокол SMTP простого пакета.

Python создать синтаксис объекта SMTP выглядит следующим образом:

import smtplib

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

Параметр Описание:

  • хостов: хост-сервера SMTP. Можно указать IP-адрес хоста или доменное имя, например: w3cschool.cc, это необязательный параметр.
  • порт: Если вы предоставляете параметр хоста, вам необходимо указать номер порта, используемый службой SMTP, при нормальных обстоятельствах номер порта SMTP является 25.
  • local_hostname: Если ваш SMTP на этой машине, вам нужно только указать адрес сервера для локального хоста.

Python объект SMTP, используя Sendmail способ отправки электронной почты с помощью следующего синтаксиса:

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

Параметр Описание:

  • from_addr: адрес электронной почты отправителя.
  • to_addrs: список строк, отправить адрес электронной почты.
  • тзд: Отправить сообщение

При этом следует отметить, что третий аргумент, тзд является строкой, которая представляет собой почту. Мы знаем, что сообщение, как правило, состоит из заголовка, отправителя, получателя, содержание сообщения, вложения и т.д., отправить почту, обратите внимание на формат MSG. Этот формат является форматом определение протокола SMTP.

примеров

Ниже приводится сообщение, отправленное с помощью Python простой пример:

#!/usr/bin/python3

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")

Мы используем три кавычки , чтобы настроить сообщения электронной почты, электронной почты стандарт требует тризаголовки:From, To итему,каждую информацию непосредственно с пустым разбитую строку.

Мы связаны инстанцировании объектамиsmtpObjдоступа модуль smtplib SMTP SMTP к, и отправить сообщение с помощью методаSendmail.

Выполните описанную выше процедуру, если вы установите этот блок Sendmail, он будет выводить:

$ python3 test.py 
邮件发送成功

Посмотрите наш почтовый ящик (обычно в мусор), вы можете просматривать сообщения электронной почты:

Если мы не будем иметь собственный доступ к Sendmail, вы также можете использовать другие поставщики услуг доступа SMTP (QQ, Netease, Google и т.д.).

#!/usr/bin/python3

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服务
mail_host="smtp.XXX.com"  #设置服务器
mail_user="XXXX"    #用户名
mail_pass="XXXXXX"   #口令 


sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP() 
    smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
    smtpObj.login(mail_user,mail_pass)
    smtpObj.sendmail(sender, receivers, message.as_string())
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")

Использование Python отправленных сообщений в формате HTML

За исключением сообщений, отправленных Python и HTML формате электронной почты будет отправлено в виде простого текста в MimeText _subtype установлен в HTML. Специальный код следующим образом:

#!/usr/bin/python3

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.w3big.com">这是一个链接</a></p>
"""
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")

Выполните описанную выше процедуру, если вы установите этот блок Sendmail, он будет выводить:

$ python3 test.py 
邮件发送成功

Посмотрите наш почтовый ящик (обычно в мусор), вы можете просматривать сообщения электронной почты:


Python отправки почты с вложениями

Отправка сообщений с вложениями, необходимо сначала создать экземпляр MIMEMultipart (), а затем построили приложение, если есть несколько вложений могут быть построены последовательно. В конце концов smtplib.smtp отправлено.

#!/usr/bin/python3

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

#创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

#邮件正文内容
message.attach(MIMEText('这是本教程Python 邮件发送测试……', 'plain', 'utf-8'))

# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att1)

# 构造附件2,传送当前目录下的 w3big.txt 文件
att2 = MIMEText(open('w3big.txt', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="w3big.txt"'
message.attach(att2)

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")
$ python3 test.py 
邮件发送成功

Посмотрите наш почтовый ящик (обычно в мусор), вы можете просматривать сообщения электронной почты:


Добавить изображение в HTML-текст

HTML текст сообщения в общих поставщики услуг электронной почты, чтобы добавить вне цепи не является действительным, право добавить прорыва приведены ниже:

#!/usr/bin/python3

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

msgRoot = MIMEMultipart('related')
msgRoot['From'] = Header("本教程", 'utf-8')
msgRoot['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
msgRoot['Subject'] = Header(subject, 'utf-8')

msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.w3big.com">本教程链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

# 指定图片为当前目录
fp = open('test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, msgRoot.as_string())
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")
$ python3 test.py 
邮件发送成功

Посмотрите наш почтовый ящик (если в мусор может потребоваться переместить в папку Входящие до обычного дисплея), вы можете просматривать сообщения электронной почты:

Для получения дополнительной информации, пожалуйста , обратитесь к: https://docs.python.org/3/library/email-examples.html .