如何解决如何使用Python的smpplib将SMS一次发送到多个号码
我已经能够使用以下代码将SMS发送到电话号码
import smpplib
import settings
import sys
client = smpplib.client.Client(settings.SMS_SYSTEM_HOSTNAME,settings.SMS_SYSTEM_PORT)
# Print when obtain message_id
client.set_message_sent_handler(
lambda pdu: sys.stdout.write('sent {} {}\n'.format(pdu.sequence,pdu.message_id)))
client.set_message_received_handler(
lambda pdu: sys.stdout.write('delivered {}\n'.format(pdu.receipted_message_id)))
client.connect()
client.bind_transceiver(system_id=settings.SMS_SYSTEM_ID,password=settings.SMS_SYSTEM_PASSWORD)
pdu = client.send_message(
source_addr_ton=smpplib.consts.SMPP_TON_INTL,#source_addr_npi=smpplib.consts.SMPP_NPI_ISDN,# Make sure it is a byte string,not unicode:
source_addr='SENDER',dest_addr_ton=smpplib.consts.SMPP_TON_INTL,#dest_addr_npi=smpplib.consts.SMPP_NPI_ISDN,# Make sure thease two params are byte strings,not unicode:
destination_addr='90474xxxxx',short_message=b'Test message')
print(pdu.sequence)
client.listen()
但是该项目的主要目的是一次发送大量邮件(至少一百万个)。我该怎么办?
显而易见的解决方案可能是放置
pdu = client.send_message(
source_addr_ton=smpplib.consts.SMPP_TON_INTL,not unicode:
destination_addr='904xxxxxxxx',short_message=b'Test message')
是一个循环,但是我对此表示怀疑。是否有更好,更有效的方法来使用Python和SMPP发送批量SMS?
解决方法
您可以使用消息代理和分布式任务队列(例如celery和rabbitmq)。
有了这些,您可以拥有异步任务。每个任务是一个独立的代码,而一个任务将发送一个SMS。 因此,您不必在循环中发送所有SMS,而可以在消息代理队列中创建任务。分布式任务队列服务将执行它们。
PS:如果使用循环,建议您添加try/except
。因此,如果send_message
失败,您将不会被迫重新开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。