实用脚本能批量SMTP吗?

wen 实用脚本 39

本文目录导读:

实用脚本能批量SMTP吗?

  1. Python脚本(最灵活)
  2. Bash脚本(Linux/Unix)
  3. PowerShell脚本(Windows)
  4. Node.js脚本
  5. 重要注意事项

是的,可以通过脚本批量发送SMTP邮件,下面我提供几种常见的实现方式:

Python脚本(最灵活)

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import csv
def send_bulk_emails(smtp_server, port, username, password, csv_file):
    # 连接到SMTP服务器
    server = smtplib.SMTP(smtp_server, port)
    server.starttls()
    server.login(username, password)
    # 读取CSV文件(每行:email, subject, content)
    with open(csv_file, 'r') as f:
        reader = csv.reader(f)
        for row in reader:
            to_email, subject, content = row
            msg = MIMEMultipart()
            msg['From'] = username
            msg['To'] = to_email
            msg['Subject'] = subject
            msg.attach(MIMEText(content, 'plain'))
            try:
                server.sendmail(username, [to_email], msg.as_string())
                print(f"✓ 已发送到 {to_email}")
            except Exception as e:
                print(f"✗ 发送失败 {to_email}: {e}")
    server.quit()
# 使用示例
send_bulk_emails(
    "smtp.gmail.com", 587,
    "your_email@gmail.com",
    "your_app_password",  # Gmail需要应用专用密码
    "recipients.csv"
)

Bash脚本(Linux/Unix)

#!/bin/bash
# 发送批量邮件
while IFS=',' read -r email subject content
do
    echo -e "Subject: $subject\n\n$content" | \
    sendmail -v "$email"
    echo "已发送到:$email"
done < emails.csv
# 使用 ssmtp
while IFS=',' read -r email subject content
do
    cat << EOF | ssmtp "$email"
Subject: $subject
To: $email
$content
EOF
    echo "已发送到:$email"
done < emails.csv

PowerShell脚本(Windows)

# 批量发送邮件
$smtpServer = "smtp.office365.com"
$smtpPort = 587
$from = "your@domain.com"
$password = "your-password"
$mailList = Import-Csv "recipients.csv"
foreach ($mail in $mailList) {
    $params = @{
        SmtpServer = $smtpServer
        Port = $smtpPort
        UseSsl = $true
        Credential = New-Object System.Management.Automation.PSCredential($from, (ConvertTo-SecureString $password -AsPlainText -Force))
        From = $from
        To = $mail.Email
        Subject = $mail.Subject
        Body = $mail.Content
    }
    try {
        Send-MailMessage @params
        Write-Host "✓ 已发送到 $($mail.Email)"
    }
    catch {
        Write-Host "✗ 发送失败 $($mail.Email): $_"
    }
}

Node.js脚本

const nodemailer = require('nodemailer');
const fs = require('fs');
// 配置传输器
const transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 587,
    secure: false,
    auth: {
        user: 'your@gmail.com',
        pass: 'your-app-password'
    }
});
// 读取CSV文件
const csv = require('csv-parser');
const recipients = [];
fs.createReadStream('recipients.csv')
    .pipe(csv())
    .on('data', (row) => recipients.push(row))
    .on('end', async () => {
        for (const recipient of recipients) {
            try {
                await transporter.sendMail({
                    from: '"发件人" <your@gmail.com>',
                    to: recipient.email,
                    subject: recipient.subject,
                    text: recipient.content
                });
                console.log(`✓ 已发送到 ${recipient.email}`);
            } catch (error) {
                console.log(`✗ 发送失败 ${recipient.email}: ${error.message}`);
            }
        }
    });

重要注意事项

⚠️ 使用前必须注意:

  1. 验证收件人:确保有收件人同意
  2. 限制发送频率:避免被标记为垃圾邮件
  3. 使用应用专用密码:Gmail等需要
  4. 遵守法规:遵循当地反垃圾邮件法律
  5. 添加退订链接:商业邮件需要

推荐方案

  • 小型批量(<100封):Python脚本
  • 中型批量(100-1000封):专业邮件服务API
  • 大型批量(>1000封):使用SendGrid/Mailgun等商业服务

需要具体的CSV格式模板或更多定制功能吗?

抱歉,评论功能暂时关闭!