When people talk about sending an SMS from code, Twilio’s SMS library is usually the first thing that comes up. This post skips Twilio and uses Python’s built-in smtplib module instead. That sounds odd, since smtplib is built for email, but you can use it to send text messages too. All you need is your carrier’s SMS gateway. Every carrier runs its own gateway; you can read more about how they work in this SMS gateway overview.
SMS gateways for each carrier
- AT&T: [number]@txt.att.net
- Sprint: [number]@messaging.sprintpcs.com or [number]@pm.sprint.com
- T-Mobile: [number]@tmomail.net
- Verizon: [number]@vtext.com
- Boost Mobile: [number]@myboostmobile.com
- Cricket: [number]@sms.mycricket.com
- Metro PCS: [number]@mymetropcs.com
- Tracfone: [number]@mmst5.tracfone.com
- U.S. Cellular: [number]@email.uscc.net
- Virgin Mobile: [number]@vmobl.com
Writing the script
Start by importing smtplib and the MIME module, which structures the message. You can read more about the format here: Multipurpose Internet Mail Extensions (MIME).
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
email = "Your Email"
pas = "Your Pass"
sms_gateway = 'number@tmomail.net'
# The server we use to send emails in our case it will be gmail but every email provider has a different smtp
# and port is also provided by the email provider.
smtp = "smtp.gmail.com"
port = 587
# This will start our email server
server = smtplib.SMTP(smtp,port)
# Starting the server
server.starttls()
# Now we need to login
server.login(email,pas)
# Now we use the MIME module to structure our message.
msg = MIMEMultipart()
msg['From'] = email
msg['To'] = sms_gateway
# Make sure you add a new line in the subject
msg['Subject'] = "You can insert anything\n"
# Make sure you also add new lines to your body
body = "You can insert message here\n"
# and then attach that body furthermore you can also send html content.
msg.attach(MIMEText(body, 'plain'))
sms = msg.as_string()
server.sendmail(email,sms_gateway,sms)
# lastly quit the server
server.quit()That’s the whole script: a short way to send text messages to your phone without Twilio. If I missed anything, feel free to DM me on Twitter.
I also wrote a small Python module that wraps this approach: termtext.