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

如何使用Python自动向特定用户发送含专属信息的短信?

批量发送个性化短信解决方案

一、基于现有CUSTOMERS字典实现批量发送

先优化原短信发送函数,修复硬编码的SMTP服务器问题,并添加连接关闭逻辑:

import smtplib
import pandas as pd
from providers import PROVIDERS

def send_sms_via_email(
        number: str,
        message: str,
        provider: str,
        sender_email: str = 'sample@email.com',
        subject: str = "Test Python Text",
        smtp_server: str = "sampleserver.com",
        smtp_port: int = 25):
    receiver_email = f"{number}@{PROVIDERS.get(provider).get('sms')}"
    email_message = f"Subject:{subject}\nTo:{receiver_email}\n{message}"
    
    # 复用传入的SMTP参数,避免硬编码
    smtp = smtplib.SMTP(smtp_server, smtp_port)
    login = pd.read_csv('logindetails.csv')
    smtp.login(login.Username[0], login.Password[0])
    smtp.sendmail(sender_email, receiver_email, email_message)
    smtp.quit()  # 关闭连接释放资源

然后遍历CUSTOMERS字典,自动给每个客户发送个性化短信:

from customers import CUSTOMERS

# 遍历所有客户信息
for customer_id, customer_data in CUSTOMERS.items():
    # 从客户数据中提取所需字段(确保CUSTOMERS字典包含这些键)
    phone_number = customer_data.get('phone_number')
    provider = customer_data.get('provider')
    loc_name = customer_data.get('loc_Name')
    delivery_order = customer_data.get('Delivery')
    
    # 生成个性化短信内容
    body = f"Hello,\nThe customer {loc_name} is experiencing delays on order {delivery_order}."
    
    # 调用发送函数
    send_sms_via_email(phone_number, body, provider)

注意:需确保CUSTOMERS字典中每个客户条目包含phone_number(手机号)、provider(运营商名称,需匹配PROVIDERS中的键)、loc_Name和Delivery字段。

二、基于CSV文件存储客户信息实现批量发送

如果想用CSV管理客户信息,先创建customers.csv文件,格式如下:

customer_id,phone_number,provider,loc_Name,Delivery
6101024714,5555555555,T-Mobile,Main Street Store,ORD12345
6101024715,5555555556,AT&T,Downtown Branch,ORD12346

然后修改代码读取CSV并批量发送:

import smtplib
import pandas as pd
from providers import PROVIDERS

def send_sms_via_email(
        number: str,
        message: str,
        provider: str,
        sender_email: str = 'sample@email.com',
        subject: str = "Test Python Text",
        smtp_server: str = "sampleserver.com",
        smtp_port: int = 25):
    receiver_email = f"{number}@{PROVIDERS.get(provider).get('sms')}"
    email_message = f"Subject:{subject}\nTo:{receiver_email}\n{message}"
    
    smtp = smtplib.SMTP(smtp_server, smtp_port)
    login = pd.read_csv('logindetails.csv')
    smtp.login(login.Username[0], login.Password[0])
    smtp.sendmail(sender_email, receiver_email, email_message)
    smtp.quit()

# 读取CSV中的客户信息
customers_df = pd.read_csv('customers.csv')

# 遍历每一行客户数据
for _, row in customers_df.iterrows():
    phone_number = row['phone_number']
    provider = row['provider']
    loc_name = row['loc_Name']
    delivery_order = row['Delivery']
    
    body = f"Hello,\nThe customer {loc_name} is experiencing delays on order {delivery_order}."
    send_sms_via_email(phone_number, body, provider)

额外优化建议

  • 添加异常处理:避免单个客户发送失败导致整个批量任务中断,示例:
    try:
        send_sms_via_email(phone_number, body, provider)
        print(f"短信已发送给客户 {customer_id}")
    except Exception as e:
        print(f"发送给客户 {customer_id} 失败: {str(e)}")
    
  • 优化登录信息读取:将登录信息读取移到函数外,避免每次发送重复读取CSV:
    # 在函数外读取一次登录信息
    login = pd.read_csv('logindetails.csv')
    sender_cred = (login.Username[0], login.Password[0])
    
    # 修改函数接收cred参数
    def send_sms_via_email(number: str, message: str, provider: str, sender_cred: tuple, ...):
        ...
        smtp.login(sender_cred[0], sender_cred[1])
        ...
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:40:32