鱼C论坛

 找回密码
 立即注册
查看: 6185|回复: 6

[已解决]关于QQ邮箱的From格式

[复制链接]
发表于 2023-8-22 11:03:13 | 显示全部楼层
根据腾讯官网的说明,如果昵称包含非ASCII字符(如中文),则需要使用base64对昵称进行编码。下面是一个示例代码,演示如何使用QQ邮箱发送邮件并设置正确的From头部格式:

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.header import Header
  4. import base64

  5. # QQ邮箱配置
  6. smtp_server = 'smtp.qq.com'
  7. smtp_port = 465
  8. sender = 'your_qq_email@qq.com'
  9. password = 'your_qq_email_password'

  10. # 收件人邮箱
  11. receiver = 'recipient@example.com'

  12. # 编码昵称
  13. nickname = '谢谢你'
  14. encoded_nickname = '=?UTF-8?B?' + base64.b64encode(nickname.encode('utf-8')).decode('utf-8') + '?='

  15. # 构造邮件内容
  16. message = MIMEText('这是一封测试邮件', 'plain', 'utf-8')
  17. message['From'] = Header(encoded_nickname, 'utf-8')
  18. message['To'] = Header(receiver, 'utf-8')
  19. message['Subject'] = Header('测试邮件', 'utf-8')

  20. # 发送邮件
  21. try:
  22.     smtpObj = smtplib.SMTP_SSL(smtp_server, smtp_port)
  23.     smtpObj.login(sender, password)
  24.     smtpObj.sendmail(sender, receiver, message.as_string())
  25.     print("邮件发送成功")
  26. except smtplib.SMTPException as e:
  27.     print("邮件发送失败:" + str(e))
复制代码


在代码中,将昵称"谢谢你"进行了UTF-8编码,并使用base64进行编码。然后,在构造邮件内容时,使用编码后的昵称作为From头部的显示名称。通过这样的方式,就能正确设置包含非ASCII字符的From头部格式。

请将your_qq_email@qq.comyour_qq_email_password替换为您的QQ邮箱地址和密码,将recipient@example.com替换为您的收件人邮箱地址。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-22 11:07:39 | 显示全部楼层    本楼为最佳答案   
hynet1024 发表于 2023-8-22 11:05
这么说的话,如果想每次都自定义中文昵称的话就不现实了,对吧?

是的,您说得对。如果您想每次都自定义中文昵称,那么每次都需要对昵称进行编码,并且在构造邮件内容时使用编码后的昵称作为From头部的显示名称。这样虽然能够满足您的需求,但确实会稍显繁琐。

如果您希望在每次发送邮件时都能方便地自定义中文昵称,您可以将编码昵称的步骤封装成一个函数,这样每次发送邮件时只需要调用该函数,传入昵称作为参数,就能自动完成编码并设置正确的From头部格式。这样能够简化您的操作,让代码更加清晰易读。

以下是一个示例函数,用于将中文昵称进行编码并设置From头部格式:
  1. import base64

  2. def encode_and_format_nickname(nickname):
  3.     encoded_nickname = '=?UTF-8?B?' + base64.b64encode(nickname.encode('utf-8')).decode('utf-8') + '?='
  4.     return encoded_nickname

  5. # 使用示例
  6. custom_nickname = "自定义昵称"
  7. encoded_custom_nickname = encode_and_format_nickname(custom_nickname)
  8. print(encoded_custom_nickname)
复制代码

您可以将上述函数集成到您的邮件发送代码中,每次发送邮件时只需要调用encode_and_format_nickname函数,传入您希望使用的昵称即可。这样能够更方便地实现自定义中文昵称。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-23 02:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表