如何使用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
相关产品推荐
相关产品推荐

