当前位置: 首页 > news >正文

如何使用阿里云邮件推送免费群发邮件

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

一、申请阿里云账号

阿里云注册可以用淘宝或支付宝账号登陆,使用起来非常方便,而且还免云了实名认证的麻烦。注册地址如下:aliyun.com

二、开通邮件推送服务

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

邮件推送控制台

三、添加并验证发信域名

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

域名管理

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

域名配置

以下是我在我的域名解析里配置如下。

域名配置

四、设置发信地址

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

设置发信地址

五、获取smtp配置信息

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

确定区域

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

六、配置Python代码

将以上smtp的信息填写到下面的Python代码中

import smtplib
import pandas as pd
from email.mime.text import MIMEText
from email.header import Header
import os

# 阿里云邮件推送配置
SMTP_HOST = "smtpdm.aliyun.com"  # SMTP服务器地址
SMTP_PORT = 465  # SSL加密端口
FROM_EMAIL = "10001@xxx.top"  # 邮箱地址-需要修改
PASSWORD = "Your Password"  # 邮箱密码或授权码
DISPLAY_NAME = "邮件系统"  # 发件人显示名称

# 邮件内容配置
EMAIL_SUBJECT = "重要通知:系统升级维护"
EMAIL_CONTENT = """
尊敬的同事:

根据公司IT规划,我们将于2023年12月15日(周五)20:00至24:00进行系统升级维护。
升级期间所有业务系统将暂停访问,请提前做好工作安排。

如有疑问请联系IT支持部门:
电话:400-123-4567
邮箱:support@yourcompany.com

IT管理中心
"""


def get_recipients(excel_path):
    """从Excel获取收件人列表(自动识别邮箱列)"""
    try:
        # 验证文件存在性
        if not os.path.isfile(excel_path):
            raise FileNotFoundError(f"文件不存在: {excel_path}")

        # 读取Excel数据
        df = pd.read_excel(excel_path, engine='openpyxl')

        # 自动检测邮箱列(支持中英文列名)
        email_col = next(
            (col for col in df.columns
             if any(kw in col.lower() for kw in ['mail', '邮箱', 'email'])),
            None
        )

        if not email_col:
            available_columns = ", ".join(df.columns)
            raise ValueError(f"未找到邮箱列,可用列有: {available_columns}")

        # 清洗邮箱数据
        recipients = (
            df[email_col]
                .astype(str)
                .str.strip()
                .str.lower()
                .dropna()
                .unique()
                .tolist()
        )

        print(f"从Excel读取到 {len(recipients)} 个有效邮箱地址")
        return recipients

    except Exception as e:
        print(f"❌ 读取收件人列表失败: {e}")
        return []


def send_text_email(receiver):
    """发送纯文本邮件(阿里云邮件推送专用)"""
    try:
        # 创建邮件对象
        msg = MIMEText(EMAIL_CONTENT, 'plain', 'utf-8')

        # 设置邮件头(符合企业邮箱规范)
        msg['From'] = f"{Header(DISPLAY_NAME, 'utf-8').encode()} <{FROM_EMAIL}>"
        msg['To'] = receiver
        msg['Subject'] = Header(EMAIL_SUBJECT, 'utf-8')

        # 建立加密连接并发送
        with smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT) as server:
            server.login(FROM_EMAIL, PASSWORD)
            server.sendmail(FROM_EMAIL, [receiver], msg.as_string())

        print(f"✓ 已发送至: {receiver}")
        return True

    except smtplib.SMTPAuthenticationError:
        print(f"✗ 认证失败,请检查账号密码 | 目标: {receiver}")
    except smtplib.SMTPRecipientsRefused:
        print(f"✗ 收件人被拒绝,可能邮箱不存在 | 目标: {receiver}")
    except Exception as e:
        print(f"✗ 发送错误: {receiver} | 错误: {str(e)[:100]}")
    return False


if __name__ == "__main__":
    print("\n=== 阿里云企业邮箱批量发送系统 ===")
    print(f"发件人: {DISPLAY_NAME} <{FROM_EMAIL}>")

    # 步骤1:获取收件人
    recipients = get_recipients("email.xlsx")

    if not recipients:
        print("❌ 程序终止:没有有效的收件人地址")
    else:
        # 步骤2:测试发送(给自己发一封)
        print("\n正在发送测试邮件...")
        if not send_text_email(FROM_EMAIL):
            print("❌ 测试邮件发送失败,请检查配置")
        else:
            # 步骤3:批量发送
            print("\n开始批量发送...")
            success_count = 0
            for email in recipients:
                if email != FROM_EMAIL.lower():  # 避免重复发送
                    if send_text_email(email):
                        success_count += 1

            # 发送结果统计
            print(f"\n发送完成: 成功 {success_count}/{len(recipients)}")
            if success_count < len(recipients):
                print("⚠ 注意:部分邮件发送失败,请查看上方日志")

    print("\n=== 程序执行结束 ===")

以上Python代码可以读取email.xlsx文件中的邮件地址,注意表头要用“email”或“mail”,格式如下:

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

七、学后总结

1. 邮件发送一直是我学习网络技术的一项难题,今天终于验证成功域名后,成功实现了采用Python群发邮件。

2. 之前卡在域名验证上面,对于空的主机记录,我不知道如何填写,后来才明白应该填写@就可以了。

3. 以上代码适用于只发送文本信息,至于要发送附件信息,需要借助下面一篇文章中的内容:

相关文章:

  • 基本命令题与答案
  • 3 VS Code 配置优化与实用插件推荐:settings.json 详解、CodeGeeX 智能编程助手及插件离线安装方法
  • 企业经营决策风险
  • 在人工智能与计算机技术融合的框架下探索高中教育数字化教学模式的创新路径
  • 系统的安全及应用
  • 【数字电路】第四章 组合逻辑电路
  • 门极驱动器DRV8353M设计(二)
  • 问题 | 针对SSM(Spring + Spring MVC + MyBatis)框架的去Spring MVC强化版学习路线
  • 本地缓存方案Guava Cache
  • 《MySQL是怎样运行的》总结笔记
  • vue入门:template 和 JSX
  • jupyter4.4安装使用
  • 器件封装-2025.4.13
  • 【李宏毅深度学习——回归模型的PyTorch架构】Homework 1:COVID-19 Cases Prediction (Regression)
  • 【深拷贝、浅拷贝】golang函数参数传递,变量复制后,操作变量参数,是否影响原有数据?全面解析
  • 软件设计的核心:从模块化到内聚与耦合
  • dify部署,ollama部署,拉取模型,创建ai聊天应用
  • 神经特征的统计度量及AI拓展
  • uniapp转换markdown
  • MySQL 常见存储引擎全解析:InnoDB、MyISAM、Memory 等对比与实战
  • 俄副外长:俄美两国将举行双边谈判
  • 今天北京白天气温超30℃,晚间为何下冰雹?
  • 新剧|《藏海传》定档,《折腰》《人生若如初见》今日开播
  • 中方代表团介绍中美经贸高层会谈有关情况:双方一致同意建立中美经贸磋商机制
  • 中美经贸高层会谈在日内瓦结束,中国代表团将举行发布会
  • 白宫启动“返乡计划” ,鼓励非法移民自愿离开美国