[Python] Jak wysłać SMS z poziomu Pythona bez użycia bramki?
Czy da się wysyłać SMS'y z poziomu Pythona bez konieczności korzystania z płatnych bramek? Oczywiście, że tak. Potrzebny do tego będzie Modem GSM z aktywną kartą SIM oraz biblioteka pySerial do komunikacji z modemem.
Przykład
W poniższym przykładzie program po uruchomieniu będzie oczekiwał na podanie numeru odbiorcy, a następnie podanie treści wiadomości SMS, po której podaniu zostanie ona wysłana. Pamiętaj, aby w modem_port podać poprawny port, gdzie podłączony jest modem.
import serial
import time
# Ustawienia portu szeregowego
modem_port = '/dev/ttyUSB0' # Port USB z modemem
baud_rate = 9600
def get_network_name(port):
try:
with serial.Serial(port, baud_rate, timeout=5) as modem:
time.sleep(1)
# Inicjalizacja
modem.write(b'AT\r')
time.sleep(1)
print(modem.read_all().decode()) # Odczytanie odpowiedzi
# Sprawdzenie operatora
modem.write(b'AT+COPS?\r')
time.sleep(1)
response = modem.read_all().decode() # Odczytanie odpowiedzi
return response
except Exception as e:
print(f'Wystąpił błąd przy pobieraniu nazwy sieci: {e}')
return None
def send_sms(port, number, message):
try:
with serial.Serial(port, baud_rate, timeout=5) as modem:
time.sleep(1)
# Ustawiamy SMS w trybie tekstowym
modem.write(b'AT+CMGF=1\r')
time.sleep(1)
print(modem.read_all().decode()) # Odczytanie odpowiedzi
# Ustawiamy numer odbiorcy
modem.write(f'AT+CMGS="{number}"\r'.encode())
time.sleep(1)
print(modem.read_all().decode()) # Odczytanie odpowiedzi
# Wyślij wiadomość
modem.write(message.encode() + b'\x1A') # \x1A to znak końca wiadomości
time.sleep(1)
print(modem.read_all().decode()) # Odczytanie odpowiedzi
print('Wiadomość wysłana')
except Exception as e:
print(f'Wystąpił błąd: {e}')
if __name__ == "__main__":
# Wyświetlenie nazwy sieci
network_name = get_network_name(modem_port)
print(f"Operator: {network_name}")
# Podaj numeru telefonu
recipient_number = input("Podaj numer telefonu w formacie: +48XXXXXXXXX: ")
# Podaj treść wiadomości
sms_text = input("Wpisz treść wiadomości SMS: ")
# Wysłanie wiadomości
send_sms(modem_port, recipient_number, sms_text)
Komentarze
Prześlij komentarz
Dzięki za komentarz!