# Python библиотека для отправки SMS сообщений через SMPP протокол на сервис SMS Aero
[](https://badge.fury.io/py/smsaero-smpp)
[](https://pypi.org/project/smsaero-smpp/)
[](MIT-LICENSE)
## Установка с использованием пакетного менеджера pip:
```bash
pip install smsaero-smpp
```
## Пример использования в коде:
Логин и пароль Вы можете добавить в настройках аккаунта, включая статический IP-адрес
на странице https://smsaero.ru/cabinet/settings/apikey/, в секции "SMPP-доступы".
```python
from smsaero_smpp import SmsAeroSmpp
SMSAERO_USER = 'ваш логин'
SMSAERO_PASS = 'ваш пароль'
def send_sms(phone: str, message: str) -> None:
"""
Отправка SMS сообщения
Параметры:
phone (int): Номер телефона.
message (str): Содержание SMS сообщения.
"""
client = SmsAeroSmpp(
login=SMSAERO_USER,
password=SMSAERO_PASS,
source='SMS Aero',
)
try:
result = client.send_sms(phone, message)
print(result)
except ValueError as e:
print(f"Ошибка валидации: {e}")
except ConnectionError as e:
print(f"Ошибка подключения: {e}")
if __name__ == '__main__':
send_sms('+79038805678', 'Привет, мир!')
```
## Использование в командной строке (полезно для автоматизации):
```bash
export SMSAERO_USER="ваш логин"
export SMSAERO_PASS="ваш пароль"
smsaero_smpp_send \
--login "$SMSAERO_USER" \
--password "$SMSAERO_PASS" \
--phone +79038805678 \
--message 'Привет, мир!' \
--debug # опционально для включения подробного логирования
```
## Запуск в Docker (demo):
```bash
docker pull 'smsaero/smsaero_python_smpp:latest'
docker run -it --rm smsaero/smsaero_python_smpp:latest \
smsaero_smpp_send \
--login "ваш логин" \
--password "ваш пароль" \
--phone +79038805678 \
--message 'Привет, мир!'
```
## Исключения
* `SmsAeroConnectionError` - исключение при ошибке подключения к SMPP серверу (например, IP не в белом списке)
* `ValueError` - исключение при некорректных входных данных (неверный формат телефона, IP, порта и т.д.)
### Дополнительные параметры командной строки
- `--ip` - IP адрес SMPP сервера (по умолчанию: 82.202.194.38)
- `--port` - Порт SMPP сервера (по умолчанию: 2775)
- `--source` - Имя отправителя (по умолчанию: SMS Aero)
## Особенности
- Поддержка длинных сообщений (до 960 символов)
- Автоматическая валидация номера телефона
- Поддержка международного формата номеров
- Подробное логирование при необходимости
## Требования
- Python 3.6+
- smpplib
- phonenumbers
## Лицензия
MIT License
Raw data
{
"_id": null,
"home_page": "https://github.com/smsaero/smsaero_python_smpp/",
"name": "smsaero-smpp",
"maintainer": "SmsAero Team",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "support@smsaero.ru",
"keywords": "smsaero, smpp, smsaero_smpp, sms, hlr, viber",
"author": "SmsAero",
"author_email": "admin@smsaero.ru",
"download_url": "https://files.pythonhosted.org/packages/78/84/dbe658ff6d907784674fa59bc5421ba94b8b9ddd93b96ed8d27281a546de/smsaero_smpp-1.0.1.tar.gz",
"platform": "any",
"description": "# Python \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 SMS \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 SMPP \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 SMS Aero \n\n[](https://badge.fury.io/py/smsaero-smpp)\n[](https://pypi.org/project/smsaero-smpp/)\n[](MIT-LICENSE)\n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 pip:\n\n```bash\npip install smsaero-smpp\n```\n\n## \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435:\n\n\u041b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 IP-\u0430\u0434\u0440\u0435\u0441\n\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 https://smsaero.ru/cabinet/settings/apikey/, \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \"SMPP-\u0434\u043e\u0441\u0442\u0443\u043f\u044b\".\n\n```python\nfrom smsaero_smpp import SmsAeroSmpp\n\n\nSMSAERO_USER = '\u0432\u0430\u0448 \u043b\u043e\u0433\u0438\u043d'\nSMSAERO_PASS = '\u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c'\n\n\ndef send_sms(phone: str, message: str) -> None:\n \"\"\"\n \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 SMS \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\n\n \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:\n phone (int): \u041d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.\n message (str): \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 SMS \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\n \"\"\"\n client = SmsAeroSmpp(\n login=SMSAERO_USER,\n password=SMSAERO_PASS,\n source='SMS Aero',\n )\n \n try:\n result = client.send_sms(phone, message)\n print(result)\n except ValueError as e:\n print(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438: {e}\")\n except ConnectionError as e:\n print(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: {e}\")\n\n\nif __name__ == '__main__':\n send_sms('+79038805678', '\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!')\n```\n\n## \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 (\u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438):\n\n```bash\nexport SMSAERO_USER=\"\u0432\u0430\u0448 \u043b\u043e\u0433\u0438\u043d\"\nexport SMSAERO_PASS=\"\u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c\"\n\nsmsaero_smpp_send \\\n --login \"$SMSAERO_USER\" \\\n --password \"$SMSAERO_PASS\" \\\n --phone +79038805678 \\\n --message '\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!' \\\n --debug # \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n```\n\n## \u0417\u0430\u043f\u0443\u0441\u043a \u0432 Docker (demo):\n\n```bash\ndocker pull 'smsaero/smsaero_python_smpp:latest'\n\ndocker run -it --rm smsaero/smsaero_python_smpp:latest \\\n smsaero_smpp_send \\\n --login \"\u0432\u0430\u0448 \u043b\u043e\u0433\u0438\u043d\" \\\n --password \"\u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c\" \\\n --phone +79038805678 \\\n --message '\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!'\n```\n\n## \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\n\n* `SmsAeroConnectionError` - \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a SMPP \u0441\u0435\u0440\u0432\u0435\u0440\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, IP \u043d\u0435 \u0432 \u0431\u0435\u043b\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435)\n* `ValueError` - \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, IP, \u043f\u043e\u0440\u0442\u0430 \u0438 \u0442.\u0434.)\n\n### \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438\n\n- `--ip` - IP \u0430\u0434\u0440\u0435\u0441 SMPP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 82.202.194.38)\n- `--port` - \u041f\u043e\u0440\u0442 SMPP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 2775)\n- `--source` - \u0418\u043c\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: SMS Aero)\n\n## \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438\n\n- \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (\u0434\u043e 960 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)\n- \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\n- \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043d\u043e\u043c\u0435\u0440\u043e\u0432\n- \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438\n\n## \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\n\n- Python 3.6+\n- smpplib\n- phonenumbers\n\n## \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\n\nMIT License\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "SMS Aero SMPP Lib",
"version": "1.0.1",
"project_urls": {
"Bug Tracker": "https://github.com/smsaero/smsaero_python_smpp/issues",
"Download": "https://github.com/smsaero/smsaero_python_smpp/archive/refs/tags/1.0.1.tar.gz",
"Help Center": "https://smsaero.ru/support/",
"Homepage": "https://smsaero.ru/",
"Repository": "https://github.com/smsaero/smsaero_python_smpp/"
},
"split_keywords": [
"smsaero",
" smpp",
" smsaero_smpp",
" sms",
" hlr",
" viber"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "313db99f15ac3c8f3a221fc0b166abec5b6aa3c84fdadeecbb2500e99d0b80da",
"md5": "786bd793df45e72a4fe67c323ce584ad",
"sha256": "ad936b68e61f8251652f2316191e7128bc68c3e238a199531baa286adc16b37b"
},
"downloads": -1,
"filename": "smsaero_smpp-1.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "786bd793df45e72a4fe67c323ce584ad",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.6",
"size": 17184,
"upload_time": "2025-02-21T18:40:28",
"upload_time_iso_8601": "2025-02-21T18:40:28.676589Z",
"url": "https://files.pythonhosted.org/packages/31/3d/b99f15ac3c8f3a221fc0b166abec5b6aa3c84fdadeecbb2500e99d0b80da/smsaero_smpp-1.0.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7884dbe658ff6d907784674fa59bc5421ba94b8b9ddd93b96ed8d27281a546de",
"md5": "28006c53b2472b1083efc6799b24be7c",
"sha256": "3cfc8aaefbaa8fd4306a0ed99c9971bf17e16e6252b16da8d79a106371d0239e"
},
"downloads": -1,
"filename": "smsaero_smpp-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "28006c53b2472b1083efc6799b24be7c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 18760,
"upload_time": "2025-02-21T18:40:30",
"upload_time_iso_8601": "2025-02-21T18:40:30.946076Z",
"url": "https://files.pythonhosted.org/packages/78/84/dbe658ff6d907784674fa59bc5421ba94b8b9ddd93b96ed8d27281a546de/smsaero_smpp-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-21 18:40:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "smsaero",
"github_project": "smsaero_python_smpp",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "smpplib",
"specs": [
[
">=",
"2.2"
]
]
},
{
"name": "phonenumbers",
"specs": [
[
">=",
"8.13"
]
]
}
],
"tox": true,
"lcname": "smsaero-smpp"
}