怎样利用阿里云邮件推送免费群发邮件

打印 上一主题 下一主题

主题 1522|帖子 1522|积分 4566

迩来一直想利用本身的阿里云账号开一个邮件推送服务,同时还可以用python来实现邮件群发,之前没有成功,今天又尝试了一次终于成功了,现将过程纪录如下,也便于网友们少走弯路。
一、申请阿里云账号

阿里云注册可以用淘宝或支付宝账号登岸,利用起来非常方便,而且还免云了实名认证的麻烦。注册地址如下:aliyun.com
二、开通邮件推送服务

在顶部搜索【邮件推送】并开通,然后进入到邮件推送的控制台。我这里可以看到我每天可以发2000封邮件,一个月可以发6200封,系统一样平常会根据用户等级的不同配比不同的额度。


邮件推送控制台

三、添加并验证发信域名

点击左侧的【发信域名】,进入到域名管理,再点击右上角的【新建域名】,把本身用于邮件发送的域名输入进去,然后点【验证】,进入


域名管理

域名验证环节,添加三项域名剖析设置,这里要注意,如果主机纪录里没有信息就在域名里输入@就可以。


域名设置

以下是我在我的域名剖析里设置如下。


域名设置

四、设置发信地址

进入到发信地址,设置发信地址如10001@xxx.com, 设置SMTP密码,注意要20位,最好是巨细写字母组成。


设置发信地址

五、获取smtp设置信息

根据邮件推送工作台选择的区域:华东1(杭州),确定smtp的地址为:


确定区域

我们从资助文档——邮件推送——SMTP服务地址那边获取华东1(杭州)smtp地址为:http://smtpdm.aliyun.com


六、设置Python代码

将以上smtp的信息填写到下面的Python代码中
  1. import smtplib
  2. import pandas as pd
  3. from email.mime.text import MIMEText
  4. from email.header import Header
  5. import os
  6. # 阿里云邮件推送配置
  7. SMTP_HOST = "smtpdm.aliyun.com"  # SMTP服务器地址
  8. SMTP_PORT = 465  # SSL加密端口
  9. FROM_EMAIL = "10001@xxx.top"  # 邮箱地址-需要修改
  10. PASSWORD = "Your Password"  # 邮箱密码或授权码
  11. DISPLAY_NAME = "邮件系统"  # 发件人显示名称
  12. # 邮件内容配置
  13. EMAIL_SUBJECT = "重要通知:系统升级维护"
  14. EMAIL_CONTENT = """
  15. 尊敬的同事:
  16. 根据公司IT规划,我们将于2023年12月15日(周五)20:00至24:00进行系统升级维护。
  17. 升级期间所有业务系统将暂停访问,请提前做好工作安排。
  18. 如有疑问请联系IT支持部门:
  19. 电话:400-123-4567
  20. 邮箱:support@yourcompany.com
  21. IT管理中心
  22. """
  23. def get_recipients(excel_path):
  24.     """从Excel获取收件人列表(自动识别邮箱列)"""
  25.     try:
  26.         # 验证文件存在性
  27.         if not os.path.isfile(excel_path):
  28.             raise FileNotFoundError(f"文件不存在: {excel_path}")
  29.         # 读取Excel数据
  30.         df = pd.read_excel(excel_path, engine='openpyxl')
  31.         # 自动检测邮箱列(支持中英文列名)
  32.         email_col = next(
  33.             (col for col in df.columns
  34.              if any(kw in col.lower() for kw in ['mail', '邮箱', 'email'])),
  35.             None
  36.         )
  37.         if not email_col:
  38.             available_columns = ", ".join(df.columns)
  39.             raise ValueError(f"未找到邮箱列,可用列有: {available_columns}")
  40.         # 清洗邮箱数据
  41.         recipients = (
  42.             df[email_col]
  43.                 .astype(str)
  44.                 .str.strip()
  45.                 .str.lower()
  46.                 .dropna()
  47.                 .unique()
  48.                 .tolist()
  49.         )
  50.         print(f"从Excel读取到 {len(recipients)} 个有效邮箱地址")
  51.         return recipients
  52.     except Exception as e:
  53.         print(f"❌ 读取收件人列表失败: {e}")
  54.         return []
  55. def send_text_email(receiver):
  56.     """发送纯文本邮件(阿里云邮件推送专用)"""
  57.     try:
  58.         # 创建邮件对象
  59.         msg = MIMEText(EMAIL_CONTENT, 'plain', 'utf-8')
  60.         # 设置邮件头(符合企业邮箱规范)
  61.         msg['From'] = f"{Header(DISPLAY_NAME, 'utf-8').encode()} <{FROM_EMAIL}>"
  62.         msg['To'] = receiver
  63.         msg['Subject'] = Header(EMAIL_SUBJECT, 'utf-8')
  64.         # 建立加密连接并发送
  65.         with smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT) as server:
  66.             server.login(FROM_EMAIL, PASSWORD)
  67.             server.sendmail(FROM_EMAIL, [receiver], msg.as_string())
  68.         print(f"✓ 已发送至: {receiver}")
  69.         return True
  70.     except smtplib.SMTPAuthenticationError:
  71.         print(f"✗ 认证失败,请检查账号密码 | 目标: {receiver}")
  72.     except smtplib.SMTPRecipientsRefused:
  73.         print(f"✗ 收件人被拒绝,可能邮箱不存在 | 目标: {receiver}")
  74.     except Exception as e:
  75.         print(f"✗ 发送错误: {receiver} | 错误: {str(e)[:100]}")
  76.     return False
  77. if __name__ == "__main__":
  78.     print("\n=== 阿里云企业邮箱批量发送系统 ===")
  79.     print(f"发件人: {DISPLAY_NAME} <{FROM_EMAIL}>")
  80.     # 步骤1:获取收件人
  81.     recipients = get_recipients("email.xlsx")
  82.     if not recipients:
  83.         print("❌ 程序终止:没有有效的收件人地址")
  84.     else:
  85.         # 步骤2:测试发送(给自己发一封)
  86.         print("\n正在发送测试邮件...")
  87.         if not send_text_email(FROM_EMAIL):
  88.             print("❌ 测试邮件发送失败,请检查配置")
  89.         else:
  90.             # 步骤3:批量发送
  91.             print("\n开始批量发送...")
  92.             success_count = 0
  93.             for email in recipients:
  94.                 if email != FROM_EMAIL.lower():  # 避免重复发送
  95.                     if send_text_email(email):
  96.                         success_count += 1
  97.             # 发送结果统计
  98.             print(f"\n发送完成: 成功 {success_count}/{len(recipients)}")
  99.             if success_count < len(recipients):
  100.                 print("⚠ 注意:部分邮件发送失败,请查看上方日志")
  101.     print("\n=== 程序执行结束 ===")
复制代码
以上Python代码可以读取email.xlsx文件中的邮件地址,注意表头要用“email”或“mail”,格式如下:


邮件发送成功截图如下,图中我们可以清楚地到发送的基本信息。


七、学后总结

1. 邮件发送一直是我学习网络技能的一项难题,今天终于验证成功域名后,成功实现了采取Python群发邮件。
2. 之前卡在域名验证上面,对于空的主机纪录,我不知道怎样填写,厥后才明白应该填写@就可以了。
3. 以上代码实用于只发送文本信息,至于要发送附件信息,必要借助下面一篇文章中的内容:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

干翻全岛蛙蛙

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表