You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python合规免费群发邮件避免进入垃圾邮箱?

解决Python群发邮件进垃圾邮箱的合规方案及邮件服务使用指南

一、免费合规群发邮件避免进垃圾邮箱的优化方案

1. 核心问题分析

你当前使用Gmail SMTP群发但进入垃圾箱的主要原因包括:

  • 邮件内容无个性化,固定模板易被反垃圾系统识别
  • 未配置SPF/DKIM/DMARC等邮件认证(Gmail虽自带,但第三方SMTP发送仍需注意规范)
  • 发送行为过于规律,固定间隔易被判定为机器人操作

2. 具体优化措施

(1)邮件内容与合规性优化

  • 强制个性化:给每个博主的邮件加入频道名称、博主昵称等专属信息,避免完全一致的模板
  • 规避垃圾关键词:将生硬的“推广”改为“内容联动”“合作探讨”这类更真诚的表述
  • 添加退订选项:即使是免费群发,合规的退订链接能大幅降低被标记为垃圾邮件的概率
  • 优化邮件格式:同时提供纯文本和HTML版本,提升可读性的同时符合邮件规范

(2)代码层面优化

修改你的代码,加入个性化逻辑、合规配置和随机发送间隔:

from email.message import EmailMessage
import ssl
import smtplib
import time
import random

email_sender = 'myemail@gmail.com'
# 注意:Gmail开启两步验证后需使用「应用密码」,而非普通登录密码
with open('google_password.txt') as f:
    email_password = f.read().strip()

# 带个性化参数的邮件模板
def get_subject(channel_name):
    return f"合作邀请:我的Django网站与{channel_name}的内容联动"

def get_body(channel_name, youtuber_name):
    return f"""
您好{youtuber_name},

我关注您的频道{channel_name}很久了,非常喜欢您关于[领域关键词]的内容,觉得和我开发的Django网站「[网站名称]」高度契合。

网站主要提供[核心功能/服务],希望能和您探讨合作可能性,比如内容植入、专属粉丝优惠等,期待您的回复。

如果您对此不感兴趣,可点击[退订链接]取消接收此类邮件。

祝好,
[你的名字]
"""

def send_email(email_receiver, channel_name, youtuber_name):
    em = EmailMessage()
    em['From'] = email_sender
    em['To'] = email_receiver
    em['Subject'] = get_subject(channel_name)
    em['Reply-To'] = 'your-reply-email@example.com'  # 可选:指定回复邮箱
    em.set_content(get_body(channel_name, youtuber_name))

    # 添加HTML版本(可选,提升邮件质感)
    em.add_alternative(f"""
    <html>
        <body>
            <p>您好{youtuber_name},</p>
            <p>我关注您的频道{channel_name}很久了,非常喜欢您关于[领域关键词]的内容,觉得和我开发的Django网站「<a href="[你的网站链接]">[网站名称]</a>」高度契合。</p>
            <p>网站主要提供[核心功能/服务],希望能和您探讨合作可能性,比如内容植入、专属粉丝优惠等,期待您的回复。</p>
            <p>如果您对此不感兴趣,可点击<a href="[退订链接]">退订</a>取消接收此类邮件。</p>
            <p>祝好,<br>[你的名字]</p>
        </body>
    </html>
    """, subtype='html')

    context = ssl.create_default_context()
    # 使用STARTTLS模式(部分邮箱更推荐)
    with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
        smtp.starttls(context=context)
        smtp.login(email_sender, email_password)
        smtp.send_message(em)

# 存储博主的邮箱、频道名、昵称信息
email_receivers = [
    ('youtuber1@example.com', 'Tech实验室', '王老师'),
    ('youtuber2@example.com', '游戏攻略站', '李同学'),
    # ... 其他博主信息
]

for receiver_info in email_receivers:
    email_receiver, channel_name, youtuber_name = receiver_info
    try:    
        send_email(email_receiver, channel_name, youtuber_name)
        print(f"邮件已发送至: {email_receiver}")
        # 随机间隔3-7分钟,避免固定频率触发反垃圾机制
        sleep_time = random.randint(180, 420)
        time.sleep(sleep_time)
    except Exception as e:
        print(f"发送失败至{email_receiver}: {str(e)}")
        continue

print("所有邮件发送完成。")

(3)Gmail使用注意事项

  • 免费版Gmail每日发送上限为500封,大量发送陌生邮箱易触发限制
  • 必须开启两步验证并使用「应用密码」登录SMTP,普通密码会被拒绝

二、Amazon SES与Mailgun的使用方法

1. Amazon SES(免费额度内)

基础流程

  1. 注册AWS账号,进入SES控制台,先在沙箱模式下验证发件人邮箱和收件人邮箱(沙箱仅允许发送至已验证邮箱,需申请移出沙箱才能发送至任意邮箱)
  2. 绑定自有域名,配置SPF、DKIM记录,完成邮件认证
  3. 获取AWS Access Key和Secret Key,用于Python调用API

Python代码示例

先安装依赖:pip install boto3

import boto3
from botocore.exceptions import ClientError

def send_email_ses(sender, recipient, subject, body_text, body_html):
    # 初始化SES客户端(选择你的AWS区域,如us-east-1)
    client = boto3.client('ses', region_name='us-east-1',
                          aws_access_key_id='你的Access Key',
                          aws_secret_access_key='你的Secret Key')

    try:
        response = client.send_email(
            Destination={'ToAddresses': [recipient]},
            Message={
                'Body': {
                    'Html': {'Charset': 'UTF-8', 'Data': body_html},
                    'Text': {'Charset': 'UTF-8', 'Data': body_text}
                },
                'Subject': {'Charset': 'UTF-8', 'Data': subject}
            },
            Source=sender
        )
    except ClientError as e:
        print(f"发送失败: {e.response['Error']['Message']}")
    else:
        print(f"邮件发送成功!消息ID: {response['MessageId']}")

# 使用示例
sender = 'your-verified-email@example.com'
recipient = 'youtuber@example.com'
subject = '合作邀请'
body_text = '纯文本内容'
body_html = '<html><body>HTML格式的邮件内容</body></html>'

send_email_ses(sender, recipient, subject, body_text, body_html)

免费额度

每月前62000封邮件免费,超出后按每千封0.1美元收费。

2. Mailgun(免费额度内)

基础流程

  1. 注册Mailgun账号,免费版需绑定自有域名,验证域名所有权并配置SPF、DKIM记录
  2. 在控制台获取API密钥和已验证域名(沙箱域名仅允许发送至已验证邮箱,需绑定自有域名并通过审核才能发送至任意邮箱)

Python代码示例

先安装依赖:pip install requests

import requests

def send_email_mailgun(api_key, domain, sender, recipient, subject, body_text, body_html):
    response = requests.post(
        f"https://api.mailgun.net/v3/{domain}/messages",
        auth=("api", api_key),
        data={
            "from": sender,
            "to": [recipient],
            "subject": subject,
            "text": body_text,
            "html": body_html
        }
    )
    return response

# 使用示例
api_key = '你的Mailgun API密钥'
domain = 'your-verified-domain.com'  # 或沙箱域名
sender = '你的名字 <your-email@example.com>'
recipient = 'youtuber@example.com'
subject = '合作邀请'
body_text = '纯文本内容'
body_html = '<html><body>HTML格式的邮件内容</body></html>'

response = send_email_mailgun(api_key, domain, sender, recipient, subject, body_text, body_html)
print(response.text)

免费额度

每月前5000封邮件免费,超出后按每千封0.05美元收费。

内容的提问来源于stack exchange,提问作者user21744561

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:05:33