首页 > 编程语言 >无涯教程-Python - 邮件发送

无涯教程-Python - 邮件发送

时间:2023-08-26 11:32:46浏览次数:65  
标签:教程 Python SMTP 无涯 发送 HTML smtplib 电子邮件 message

简单邮件传输协议(SMTP)是一种协议,用于处理在邮件服务器之间发送电子邮件和路由电子邮件。

Python提供了 smtplib 模块,该模块定义了SMTP客户端会话对象,该对象可用于MTP或ESMTP侦听器守护程序将邮件发送到任何网络机器。

这是创建一个SMTP对象的简单语法,以后可以用于发送电子邮件-

import smtplib

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

这是参数的详细信息-

  • host                       - 这是运行SMTP服务器的主机。您可以指定主机的IP地址或域名(如learnfk.com)。这是可选参数。

  • port                       - 如果要提供 host 参数,则需要指定SMTP服务器正在监听的端口。通常,此端口为25。

  • local_hostname  -  如 果您的SMTP服务器在本地计算机上运行,​​那么从此选项开始,您可以仅指定 localhost 。

SMTP对象具有一个称为 sendmail 的方法,通常用于完成邮件的发送工作。它需要三个参数-

  • sender               - 包含发件人地址的字符串。

  • receivers           - 字符串列表,每个接收者一个。

  • message            - 以各种RFC中指定的格式格式化为字符串的消息。

这是使用Python脚本发送一封电子邮件的简单方法。尝试一次-

#!/usr/bin/python

import smtplib

sender='[email protected]'
receivers=['[email protected]']

message="""From: From Person <[email protected]>
To: To Person <[email protected]>
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"

在这里,您已经在邮件中放置了一个基本电子邮件,使用三重引号,注意正确设置标题的格式。电子邮件需要 From , To 和 Subject 标头,并以空白行与电子邮件正文分开。

如果您不在本地计算机上运行SMTP服务器,则可以使用 smtplib 客户端与远程SMTP服务器通信。除非您使用Webmail服务(如Hotmail或Yahoo! Mail),否则您的电子邮件提供商必须已向您提供了可以提供它们的外发邮件服务器详细信息,如下所示-

smtplib.SMTP('mail.your-domain.com', 25)

发送HTML邮件

使用Python发送文本消息时,所有内容均被视为简单文本。即使您在文本消息中包含HTML标签,它也将显示为简单文本,并且HTML标签不会根据HTML语法进行格式化。但是Python提供了将HTML消息作为实际HTML消息发送的选项。

发送电子邮件时,您可以指定Mime版本,内容类型和字符集来发送HTML电子邮件。

以下是将HTML内容作为电子邮件发送的示例。尝试一次-

#!/usr/bin/python

import smtplib

message="""From: From Person <[email protected]>
To: To Person <[email protected]>
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"

发送附件

要发送包含混合内容的电子邮件,需要将 Content-type 标头设置为 multipart/mixed 。然后,可以在边界内指定文本和附件部分。

边界以两个连字符开头,后跟一个唯一编号,该编号不能出现在电子邮件的邮件部分中。表示电子邮件最后部分的最后边界也必须以两个连字符结尾。

附件应在传输前使用 pack(" m")函数进行编码,以具有base64编码。

以下是示例,该示例发送文件 /tmp/test.txt 作为附件。尝试一次-

#!/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='[email protected]'
reciever='[email protected]'

marker="AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# 定义主要标题。
part1="""From: From Person <[email protected]>
To: To Person <[email protected]>
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"

参考链接

https://www.learnfk.com/python/python-sending-email.html

标签:教程,Python,SMTP,无涯,发送,HTML,smtplib,电子邮件,message
From: https://blog.51cto.com/u_14033984/7241817

相关文章

  • Webstorm 2023.2 最新安装教程(附激活码,亲测有效)
    笔者几乎试了网上几乎所有的Webstorm激活方案,发现这种靠谱的激活方法,先上图。本教程适用Windows/Mac/Linux系统,文中以Windows系统为例做讲解,其他系统按照教程顺序即可。前言Webstorm目前已经更新到最新的2023.2版本了,群里的小伙伴私聊问我,为啥之前2021.3.1的激活套......
  • Webstorm 2023 最新激活教程「亲测好用」
    本教程适用Windows/Mac/Linux系统,文中以Windows系统为例做讲解,其他系统按照教程顺序即可。第一步:下载最新的Webstorm2023.2版本安装包我们先从Webstorm官网下载Webstorm2023.2版本的安装包,下载链接如下:https://www.jetbrains.com/webstorm/download点击下载,静心......
  • 2023 Webstorm 安装激活教程
    Webstorm目前已经更新到最新的2023.2版本了,针对最新版本,记录Webstorm2023.2版本的激活到2099年的全过程,步骤非常详细,跟着图文来就行~第一步:下载最新的Webstorm2023.2版本安装包我们先从Webstorm官网下载Webstorm2023.2版本的安装包,下载链接如下:https://www.j......
  • Python使用jieba分词输出txt文件
    1、准备好一个原始的txt文件2、在Pycharm里面下载jieba包3、将txt文件放到项目里面hlm.txt为原始文件;result.txt为存放结果的文件;4、分词代码importjiebaarticle=open('hlm.txt','r',encoding='UTF-8')sent=article.read()sent_list=jieba.cut(sent)resu......
  • Python多线程
    当进行多线程编程时,涉及到以下几个关键概念和操作多线程是指在一个进程中同时运行多个线程,每个线程都可以执行不同的任务。线程是操作系统能够进行运算调度的最小单位,它是进程中的一个实体,可以被操作系统独立调度。以下是与多线程相关的一些核心概念:1.**进程和线程**:-进程......
  • Python:过滤包含关键字的行
    PythonPandas:根据指定的关键字,过滤(提取)包含该关键字的行,并保存为Excel文件。importpandasaspdimportnumpyasnpinFile=r'D:\教学任务列表(理论课).xlsx'outFile=r'D:\教学任务(统计).xlsx'df1=pd.read_excel(inFile,header=1)type(df1)df1.head()df1.col......
  • python应用耗时分析
    Linuxtimecommandhttps://linuxize.com/post/linux-time-command/粗略分析整个程序的耗时情况。 timewgethttps://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.9.tar.xzWhatwillbeprintedasanoutputdependsontheversionofthetimecommandyou’reu......
  • 【8月摸鱼计划】Python GUI
    总结了一下Python下的图形界面GUI工具,暂时能找到的资料就这么多,后续会补充推荐学习资料。图形界面的定义图形界面图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。图形用户界面是一种人与计算机通信的界面显示格式,允许用......
  • 无涯教程-Python - 网络编程
    本章将使您对网络-Socket编程中最著名的概念有所了解。Socket是双向通信通道的端点。Socket可以在一个进程内,同一台机器上的进程之间或不同大陆上的进程之间进行通信。Socket可以在许多不同的通道类型上实现:Unix域Socket,TCP,UDP等。socket库提供用于处理常见传输的特定类以......
  • 用Python制作一个PDF转Word工具
    工具:Python3.9.13,VSCode1.73.1,pdf2docx0.5.6,tkinter,Win10HomePDF文件不易编辑,想要编辑需要转成Word,但网上的工具很多要充VIP,所以今天我们就来做个PDF转Word工具。首先先安装第三方库:pipinstalltkinter导入库:#coding=utf-8importosimporttkinterfrompdf2docximport......