【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

本文主要是介绍【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


目录

  • 一、邮箱注册
  • 二、邮箱设置
    • 服务开启
    • POP3 & SMTP & IMAP 介绍
  • 三、Python发送邮件
    • 发送默认邮件
    • 邮件格式
      • 发送文本格式邮件
      • 发送HTML格式邮件
      • 发送HTML带内嵌图片
      • 发送带附件邮件
  • 四、完整代码
  • 总结


本系列文章为参与【Python】CSDN21天学习挑战赛,成为更好的自己,根据自身的学习进度并记录自己的学习过程。我也是Python纯小白,和大家一起学习,保持热爱学习的好习惯😁

活动地址:CSDN21天学习挑战赛


一、邮箱注册

注册网易邮箱,其他邮箱也支持的,我这里以网易为例,都差不多


二、邮箱设置

服务开启

1.注册后登录邮箱,选择我们设置
在这里插入图片描述

2.找到我们的POP3/SMTP/IMAP
在这里插入图片描述

3.需要开启我们的IMAP/SMTP服务和POP3/SMTP服务
在这里插入图片描述
提示:如果服务默认是开启的,但是不知道授权码,可以选择新增,或者删除,关闭服务重新开启,都是可以的
在这里插入图片描述

4.首先我们开启IMAP/SMTP服务,需要发送短信验证,使用手机微信,浏览器扫码都行,发送成功后,点击我已发送
在这里插入图片描述

5.然后就会生成一串授权码,一定一定要先记下来,再点击确定,这里使用设备随便填
在这里插入图片描述

6.接着,我们开启POP3/SMTP服务,一样需要扫码发送短信
在这里插入图片描述

7.开启成功后,就会弹出提示,我们就可以用刚刚的授权码来发送邮件了
在这里插入图片描述


POP3 & SMTP & IMAP 介绍

POP3 是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

IMAP 全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

网易163免费邮箱相关服务器信息

服务器名称服务器地址SSL协议端口号非SSL协议端口号
IMAPimap.163.com993143
SMTPsmtp.163.com456/99425
POP3pop.163.com995110

POP3IMAP 的区别

协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。

IMAP 提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

同时,IMAPPOP3 那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP 提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。

操作位置操作内容IMAPPOP3
收件箱阅读,标记,移动,删除邮件等客户端与邮箱更新同步仅客户端内
发件箱保存到已发送客户端与邮箱更新同步仅客户端内
创建文件夹新建自定义文件夹客户端与邮箱更新同步仅客户端内
草稿保存草稿客户端与邮箱更新同步仅客户端内
垃圾文件夹接受误移入垃圾文件夹的邮件支持不支持
广告邮件接受被移入广告文件夹的邮件支持不支持

总之,IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。

注: 若在web邮箱中设置了“保存到已发送”,使用客户端POP服务发信时,已发邮件也会自动同步到网页端“已发送”文件夹内。


三、Python发送邮件

发送默认邮件

1.启动PyCharm
2.新建文件email_163
在这里插入图片描述

3.导入发送邮件模块

# 导入发送邮件模块
import smtplib

4.创建class类

# 发送网易邮箱类
class Email163(object):

5.建议所有不怎么会变动的设置为类常量

# 服务器地址
HOST = 'smtp.163.com'
# 端口
PORT = '25'
# 授权码
PASSWORD = '填写自己的授权码(不是邮箱密码)'
# 登录用户(邮件发送者)
FROM_ADDR = '填写自己发送者的邮箱'

6.构造函数

def __init__(self, msg: str, to_addrs: str) -> None:"""构造函数:param msg: 邮件内容:param to_addrs: 邮件接收者"""self.msg = msgself.to_addrs = to_addrs

7.定义发送默认邮件函数

def send_default_email(self) -> None:"""发送默认邮件:return:None"""try:# 实例SMTPsmtp = smtplib.SMTP()# 连接邮箱服务器smtp.connect(self.HOST, self.PORT)# 验证授权码smtp.login(self.FROM_ADDR, self.PASSWORD)# 发送邮件smtp.sendmail(self.FROM_ADDR, self.to_addrs, self.msg)# 发送完邮件,关闭服务smtp.close()print(f'邮件成功发送给:{self.to_addrs}')except smtplib.SMTPException:raise f'给{to_addrs}发送邮件失败'

8.入口函数调用

if __name__ == '__main__':# 邮件内容msg = 'hello world'# 邮件接收者(填写自己想要发送给别人的邮箱地址)# 可以发送多人(可以发给自己),格式:to_addrs = ['980338974@qq.com','*****','********']to_addrs = '980338974@qq.com'# 实例发送网易邮箱的类email163 = Email163(msg, to_addrs)# 调用发送邮件函数email163.send_default_email()

9.可以看到邮件以及发送成功了
在这里插入图片描述
10.接下来我们登录接收的邮箱看看,发现成功接收了邮件,但是没有主题,也没有任何内容
在这里插入图片描述


邮件格式

我们可以使用第三方库email中的一些模块,更方便快速的构造邮件内容

发送文本格式邮件

提示:如果使用email模块群发邮件,群发报错AttributeError: 'list' object has no attribute 'decode'可以将接收者列表用,或;拼接为字符串','.join(to_addrs)

1.导入模块

# 导入邮件主题构造模块
from email.header import Header
# 导入邮件内容构造模块
from email.mime.text import MIMEText

2.定义发送文本格式邮件函数

def send_text_email(self) -> None:"""发送文本格式邮件:return:None"""try:# 实例SMTPsmtp = smtplib.SMTP()# 连接邮箱服务器smtp.connect(self.HOST, self.PORT)# 验证授权码smtp.login(self.FROM_ADDR, self.PASSWORD)# 构造邮件内容# 第一个参数_text:内容# 第二个参数_subtype:格式# 第三个参数_charset:编码# 实例邮件正文message = MIMEText('这是使用Python发送的邮件测试!', 'plain', 'utf-8')# 构造邮件主题信息# 主题message['Subject'] = Header('Python发送邮件', 'utf-8')# 发送者message['From'] = Header(self.FROM_ADDR, 'utf-8')# 接收者# message['To'] = Header(','.join(self.to_addrs), 'utf-8')  # 接收者为多人[]时,需要用,拼接为字符串message['To'] = Header(self.to_addrs, 'utf-8')# 发送邮件smtp.sendmail(self.FROM_ADDR, self.to_addrs, message.as_string())# 发送完邮件,关闭服务smtp.close()print(f'邮件成功发送给:{self.to_addrs}')except smtplib.SMTPException:raise f'给{to_addrs}发送邮件失败'

3.入口函数调用

if __name__ == '__main__':# 邮件内容msg = 'hello world'# 邮件接收者(填写自己想要发送给别人的邮箱地址)# 可以发送多人(可以发给自己),格式:to_addrs = ['980338974@qq.com','*****','********']to_addrs = '980338974@qq.com'# 实例发送网易邮箱的类email163 = Email163(msg, to_addrs)# 调用发送邮件函数email163.send_text_email()

4.再看邮箱,就有主题和内容了
在这里插入图片描述


发送HTML格式邮件

1.定义发送HTML格式邮件函数

def send_html_email(self) -> None:"""发送HTML格式邮件:return:None"""try:# 实例SMTPsmtp = smtplib.SMTP()# 连接邮箱服务器smtp.connect(self.HOST, self.PORT)# 验证授权码smtp.login(self.FROM_ADDR, self.PASSWORD)# 构造邮件内容# 第一个参数_text:内容# 第二个参数_subtype:格式# 第三个参数_charset:编码text = """<h1>这是使用Python发送的HTML格式邮件测试,我是h1</h1><a href="http://t.csdn.cn/p58Yf">我是一个链接</a><table><th>我是表格列头</th><tr><td bgcolor="PowderBlue">我是有颜色的表单元格</td></tr></table>"""# 实例邮件正文message = MIMEText(text, 'html', 'utf-8')# 构造邮件主题信息# 主题message['Subject'] = Header('Python发送邮件', 'utf-8')# 发送者message['From'] = Header(self.FROM_ADDR, 'utf-8')# 接收者message['To'] = Header(','.join(self.to_addrs), 'utf-8')  # 接收者为多人[]时,需要用,拼接为字符串# message['To'] = Header(self.to_addrs, 'utf-8')# 发送邮件smtp.sendmail(self.FROM_ADDR, self.to_addrs, message.as_string())# 发送完邮件,关闭服务smtp.close()print(f'邮件成功发送给:{self.to_addrs}')except smtplib.SMTPException:raise f'给{to_addrs}发送邮件失败'

2.入口函数调用

if __name__ == '__main__':# 邮件内容msg = 'hello world'# 邮件接收者(填写自己想要发送给别人的邮箱地址)# 可以发送多人(可以发给自己),格式:to_addrs = ['980338974@qq.com','*****','********']to_addrs = '980338974@qq.com'# 实例发送网易邮箱的类email163 = Email163(msg, to_addrs)# 调用发送邮件函数email163.send_html_email()

发送HTML带内嵌图片

邮件中HTML文本中,如果使用外网链接地址,一般是无效的,同样,我们可以用MIMEImage模块完成

1.导入模块

# 导入邮件混合构造模块
from email.mime.multipart import MIMEMultipart
# 导入邮件图片处理模块
from email.mime.image import MIMEImage

2.定义函数

def send_html_with_image_email(self) -> None:"""发送HTML格式邮件带图片:return:None"""try:# 实例SMTPsmtp = smtplib.SMTP()# 连接邮箱服务器smtp.connect(self.HOST, self.PORT)# 验证授权码smtp.login(self.FROM_ADDR, self.PASSWORD)# 实例内嵌的邮件(文本,HTML,图片)message = MIMEMultipart('related')# 构造邮件内容# 第一个参数_text:内容# 第二个参数_subtype:格式# 第三个参数_charset:编码# 构造邮件主题信息# 主题message['Subject'] = Header('Python发送邮件', 'utf-8')# 发送者message['From'] = Header(self.FROM_ADDR, 'utf-8')# 接收者message['To'] = Header(','.join(self.to_addrs), 'utf-8')  # 接收者为多人[]时,需要用,拼接为字符串# message['To'] = Header(self.to_addrs, 'utf-8')text = """<h1>这是使用Python发送的HTML格式邮件测试,我是h1</h1><a href="http://t.csdn.cn/p58Yf">我是一个链接</a><table><th>我是表格列头</th><tr><td bgcolor="PowderBlue">我是有颜色的表单元格</td></tr></table><p>CSDN:</p><p><img src="cid:csdn"></p>"""# 附加邮件正文message.attach(MIMEText(text, 'html', 'utf-8'))# 打开图片img_name = 'csdn.gif'file = open(img_name, 'rb')img_data = file.read()file.close()# 创建图片img = MIMEImage(img_data)# 定义图片ID,在HTML文本中引用img.add_header('Content-ID', 'csdn')# 附加图片message.attach(img)# 发送邮件smtp.sendmail(self.FROM_ADDR, self.to_addrs, message.as_string())# 发送完邮件,关闭服务smtp.close()print(f'邮件成功发送给:{self.to_addrs}')except smtplib.SMTPException:raise f'给{to_addrs}发送邮件失败'

3.入口函数调用

if __name__ == '__main__':# 邮件内容msg = 'hello world'# 邮件接收者(填写自己想要发送给别人的邮箱地址)# 可以发送多人(可以发给自己),格式:to_addrs = ['980338974@qq.com','*****','********']to_addrs = '980338974@qq.com'# 实例发送网易邮箱的类email163 = Email163(msg, to_addrs)# 调用发送邮件函数email163.send_html_with_image_email()

4.查看邮箱,图片显示正常,因为我是网易邮箱发送给QQ邮箱,QQ邮箱设置了保护机制,点击显示图片就行了
在这里插入图片描述

5.可以看到,HTML和内嵌图片都显示成功了(这个CSDN是个gif)
在这里插入图片描述


发送带附件邮件

1.在email_163.py同级创建attachment.txt文件,文件内容可写可不写
在这里插入图片描述

2.导入模块,混合模式包含所有类型,可以发送文本格式,HTML格式,带附件

# 导入邮件混合构造模块
from email.mime.multipart import MIMEMultipart

3.定义发送带附件邮件函数

def send_attachment_email(self) -> None:"""发送带附件邮件:return:None"""try:# 实例SMTPsmtp = smtplib.SMTP()# 连接邮箱服务器smtp.connect(self.HOST, self.PORT)# 验证授权码smtp.login(self.FROM_ADDR, self.PASSWORD)# 实例带附件的邮件message = MIMEMultipart()# 构造邮件内容# 第一个参数_text:内容# 第二个参数_subtype:格式# 第三个参数_charset:编码text = """<h1>这是使用Python发送的HTML格式邮件测试,我是h1</h1><a href="http://t.csdn.cn/p58Yf">我是一个链接</a><table><th>我是表格列头</th><tr><td bgcolor="PowderBlue">我是有颜色的表单元格</td></tr></table>"""# 邮件正文message.attach(MIMEText(text, 'html', 'utf-8'))# 构造邮件主题信息# 发送者message['From'] = Header(self.FROM_ADDR, 'utf-8')# 接收者message['To'] = Header(','.join(self.to_addrs), 'utf-8')  # 接收者为多人[]时,需要用,拼接为字符串# message['To'] = Header(self.to_addrs, 'utf-8')# 主题message['Subject'] = Header('Python发送邮件', 'utf-8')# 上传当前目录下的test.txt文件(附加文件1)attachment = MIMEText(open('attachment.txt', 'rb').read(), 'base64', 'utf-8')# 指定消息内容为字节流attachment["Content-Type"] = 'application/octet-stream'# 消息描述,这里的filename可以随便填写(最好不要中文,可能会乱码),这里填写的就会在邮件中附件名称显示attachment["Content-Disposition"] = 'attachment; filename="attachment.txt"'# 附加文件message.attach(attachment)# 上传当前目录下的test.txt文件(附件2)attachment = MIMEText(open('attachment.txt', 'rb').read(), 'base64', 'utf-8')# 指定消息内容为字节流attachment["Content-Type"] = 'application/octet-stream'# 消息描述,这里的filename可以随便填写(最好不要中文,可能会乱码),这里填写的就会在邮件中附件名称显示attachment["Content-Disposition"] = 'attachment; filename="attachment2.txt"'# 附加文件2message.attach(attachment)# 发送邮件smtp.sendmail(self.FROM_ADDR, self.to_addrs, message.as_string())print(f'邮件成功发送给:{self.to_addrs}')except smtplib.SMTPException:raise f'给{to_addrs}发送邮件失败'

4.入口函数调用

if __name__ == '__main__':# 邮件内容msg = 'hello world'# 邮件接收者(填写自己想要发送给别人的邮箱地址)# 可以发送多人(可以发给自己),格式:to_addrs = ['980338974@qq.com','*****','********']to_addrs = '980338974@qq.com'# 实例发送网易邮箱的类email163 = Email163(msg, to_addrs)# 调用发送邮件函数email163.send_attachment_email()

5.打开邮箱查看,发现邮件中有两个附件
在这里插入图片描述


四、完整代码

其实上面代码中,大量的脏代码,很多重复性内容,下面完整代码我做了简单的封装处理
PASSWORD填写自己的授权码,FROM_ADDR填写邮件发送者

# 导入发送邮件模块
import smtplib
# 导入邮件主题构造模块
from email.header import Header
# 导入邮件文字构造模块
from email.mime.text import MIMEText
# 导入邮件混合构造模块
from email.mime.multipart import MIMEMultipart
# 导入邮件图片处理模块
from email.mime.image import MIMEImage# 发送网易邮件类
class Email163(object):# 服务器地址HOST = 'smtp.163.com'# 端口PORT = '25'# 授权码(不是邮箱密码)'PASSWORD = ''# 登录用户(邮件发送者)FROM_ADDR = ''# 文本格式SUBTYPE_PLAIN = 'plain'# HTML格式SUBTYPE_HTML = 'html'# 附件ATTACHMENT = 'attachment'# 内嵌EMBEDDED = 'embedded'def __init__(self, subtype: str = SUBTYPE_PLAIN, charset: str = 'utf-8') -> None:"""构造函数:param subtype: 邮件格式:plain:文本,html:超文本标记语言,n(默认plain):param charset: 编码,默认utf-8"""self.subtype = subtypeself.charset = charsetdef get_smtp(self) -> smtplib.SMTP:"""实例SMTP并验证:return: smtplib.SMTP"""try:# 实例SMTPsmtp = smtplib.SMTP()# 连接邮箱服务器smtp.connect(self.HOST, self.PORT)# 验证授权码smtp.login(self.FROM_ADDR, self.PASSWORD)return smtpexcept smtplib.SMTPException:raise f'验证邮箱失败:用户:{self.FROM_ADDR},授权码:{self.PASSWORD}'def get_message(self, subject: str, text: str, subtype: str):"""获取邮件信息:param subject: 主题:param text: 内容:param charset: 编码:return: str"""# 构造邮件内容# 第一个参数_text:内容# 第二个参数_subtype:格式# 第三个参数_charset:编码if subtype == "attachment":# 实例混合邮件(附件)message = MIMEMultipart()elif subtype == "embedded":# 实例内嵌的邮件(文本,HTML,图片)message = MIMEMultipart('related')else:# 实例文字邮件message = MIMEText(text, self.subtype, self.charset)# 构造邮件主题信息# 主题message['Subject'] = Header(subject, self.charset)# 发送者message['From'] = Header(self.FROM_ADDR, self.charset)# 接收者,接收者为多人[]时,需要用,拼接为字符串message['To'] = Header(','.join(to_addrs), self.charset)# 返回消息实例return messagedef attach_attachment(self, message, text: str, subtype: str, attachment_list: list[dict[str, str]]) -> None:"""附加上传附件(可多文件):param message: 邮件消息:param subtype: 邮件类型:param attachment_list: 附件列表(内嵌也一样,名称对应src="cid:name"中的name):格式[{"path":"附件路径1","name":"显示名称"},{"path":"附件路径2","name":"显示名称"}]:return: None"""# 附加正文if subtype in (Email163.ATTACHMENT, Email163.EMBEDDED):message.attach(MIMEText(text, self.subtype, self.charset))if subtype == Email163.ATTACHMENT:  # 附件for item in attachment_list:with open(item["path"], 'rb') as f:file_data = f.read()# 上传文件attachment = MIMEText(file_data, 'base64', 'utf-8')# 指定消息内容为字节流attachment["Content-Type"] = 'application/octet-stream'# 消息描述,这里的filename可以随便填写,这里填写的就会在邮件中附件名称显示attachment["Content-Disposition"] = f'attachment; filename="{item["name"]}"'# 附加文件message.attach(attachment)elif subtype == Email163.EMBEDDED:  # 内嵌for item in attachment_list:with open(item["path"], 'rb') as f:img_data = f.read()# 创建图片img = MIMEImage(img_data)# 定义图片ID,在HTML文本中引用img.add_header('Content-ID', item["name"])# 附加图片message.attach(img)def send_email(self, smtp: smtplib.SMTP, message: str, to_addrs: list[str]) -> None:"""发送邮件:param smtp: SMTP实例:param message: 邮件消息:return: None"""try:# 发送邮件smtp.sendmail(self.FROM_ADDR, ','.join(to_addrs), message.as_string())# 发送完邮件,关闭服务smtp.close()print(f'邮件成功发送给:{to_addrs}')except smtplib.SMTPException:raise f'给{to_addrs}发送邮件失败'def main(self, subject: str, text: str, to_addrs: list[str], subtype: str = None,attachment_list: list[dict[str, str]] = None) -> None:"""发送网易邮件:param subject: 主题:param text: 内容:param to_addrs: 接收者:param attachment_list: 附件(默认空,格式[{"path":"文件路径","name":"显示文件名"}]):return:"""# 获取SMTP实例smtp = self.get_smtp()# 获取邮件消息message = self.get_message(subject, text, subtype)# 处理附件和内嵌self.attach_attachment(message, text, subtype, attachment_list)# 发送邮件self.send_email(smtp, message, to_addrs)if __name__ == '__main__':# region 发送文本格式邮件# 实例发送网易邮件# email163 = Email163()# # 主题# subject = 'Python发送邮件'# # 内容# text = '这是使用Python发送的文本格式邮件测试!'# # 接收者(用list[str])# to_addrs = ['980338974@qq.com']# # 调用统一函数main# email163.main(subject, text, to_addrs)# endregion# 发送HTML格式,附件格式,HTML内嵌图片格式公用内容html_text = """<h1>这是使用Python发送的HTML格式邮件测试,我是h1</h1><a href="http://t.csdn.cn/p58Yf">我是一个链接</a><table><th>我是表格列头</th><tr><td bgcolor="PowderBlue">我是有颜色的表单元格</td></tr></table><h3>CSDN:</h3><img src="cid:csdn">"""# region 发送HTML格式邮件# # 实例发送网易邮件# email163_html = Email163('html')# # 主题# subject = 'Python发送邮件'# # 接收者(用list[str])# to_addrs = ['980338974@qq.com']# # 调用统一函数main# email163_html.main(subject, html_text, to_addrs)# endregion# region 发送带附件邮件# # 实例发送网易邮件# email163_html = Email163('html')# # 主题# subject = 'Python发送邮件'# # 接收者(用list[str])# to_addrs = ['980338974@qq.com']# # 调用上传附件# attachment_list = [{"path": "./attachment.txt", "name": "1.txt"}]# # 调用统一函数main# email163_html.main(subject, html_text, to_addrs, Email163.ATTACHMENT, attachment_list)# endregion# region 发送HTML内嵌图片邮件# # 实例发送网易邮件# email163_html = Email163('html')# # 主题# subject = 'Python发送邮件'# # 接收者(用list[str])# to_addrs = ['980338974@qq.com']# # 调用上传附件# attachment_list = [{"path": "./csdn.gif", "name": "csdn"}]# # 调用统一函数main# email163_html.main(subject, html_text, to_addrs, Email163.EMBEDDED, attachment_list)# endregion

总结

以上就是关于用Python发送邮件的基本用法了,还有其他的邮箱也都可以,其实方法类似,一样注册邮箱,开通服务,然后登录验证授权码,构造邮件头,构造邮件正文,上传附件…等,有啥疑问的欢迎大家评论留言,感谢大家支持!


这篇关于【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/289614

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n