Как отправить строку + переменную в виде смс с использованием Python? - PullRequest
1 голос
/ 27 сентября 2019

Мне нужно отправить сообщение, когда моя программа будет завершена, но я также хочу включить переменные, такие как продолжительность выполнения программы в тексте.

Вот мой код для текстовых сообщений:

import smtplib

carriers = {
    'att': '@mms.att.net',
    'tmobile': ' @tmomail.net',
    'verizon': '@vtext.com',
    'sprint': '@page.nextel.com'
}


def send(message):
    # Replace the number with your own, or consider using an argument\dict for multiple people.
    to_number = 'xxxxxxxxxx{}'.format(carriers['verizon'])
    auth = ('xxxxx', 'xxxx')

    # Establish a secure session with gmail's outgoing SMTP server using your gmail account
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.starttls()
    server.login(auth[0], auth[1])

    # Send text message through SMS gateway of destination number
    server.sendmail(auth[0], to_number, message)

Очевидно, я заменил свою информацию на ххх.Теперь, чтобы отправить свой текст, я вызываю функцию с помощью:

found = 'The program is done!'
timetook = "Time took: %s (HOUR:MIN:SEC)" % timedelta(seconds=round(elapsed_time_secs))
send(found)
send(timetook)

Она просто отправляет пустые тексты для времени, но программа завершена, сообщение работает нормально.Как отправить тайм-аут?

1 Ответ

0 голосов
/ 29 сентября 2019

Проблема в том, что вы не следуете правилам для SMTP.Ниже приведено эквивалентное решение, которое я написал для собственного использования много лет назад.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""SMS (short message service) functions."""

import logging
import smtplib
import sys
import rate_limiting

SMTP_GATEWAY = 'localhost'
FROM_ADDR = 'me@domain.us'
PHONE_NUMBER = '4081234567'
# T-Mobile SMS email gateway
# TO_ADDR = PHONE_NUMBER + '@tmomail.net'
# Verizon SMS email gateway
TO_ADDR = PHONE_NUMBER + '@vtext.com'

# Allow only three SMS messages per minute and five per hour.
short_term_rate_limiter = rate_limiting.SimpleRateLimiter(3, 60)
long_term_rate_limiter = rate_limiting.SimpleRateLimiter(5, 60 * 60)


def SendSms(msg, why=''):
    """Send a SMS message."""
    short_term_rate_exceeded = short_term_rate_limiter()
    long_term_rate_exceeded = long_term_rate_limiter()
    if short_term_rate_exceeded or long_term_rate_exceeded:
        logging.warning('SMS message rate exceeded, dropping msg: %s', msg)
        return

    smtp_conn = smtplib.SMTP(SMTP_GATEWAY)
    hdrs = 'From: {}\r\nTo: {}\r\n\r\n'.format(FROM_ADDR, TO_ADDR)
    if why:
        hdrs += 'Subject: {}\r\n'.format(why[:20])
    hdrs += "\r\n\r\n"
    max_msg_len = 140 - 3 - min(20, len(why))
    msg = hdrs + msg[:max_msg_len]
    # Make sure the message has only ASCII characters.
    msg = msg.encode('ascii', errors='replace').decode('ascii')
    smtp_conn.sendmail(FROM_ADDR, [TO_ADDR], msg)
    smtp_conn.quit()


if __name__ == '__main__':
    SendSms(' '.join(sys.argv[1:]))
...