Ищу CLI-отправитель электронной почты, который поддерживает OAUTH 2.0.

Вопрос или проблема

Я хочу иметь возможность отправлять сообщения Gmail с Raspberry Pi, желательно из одной строки скрипта оболочки. Я знаю, что могу использовать почтовый сервер, отличный от Gmail, который поддерживает менее безопасные варианты входа, или перейти на https://www.google.com/settings/security/lesssecureapps и изменить настройки там – но я не хочу этого делать, так как предпочитаю использовать более новую версию OAUTH.

Существует множество вариантов электронной почты, многие из которых имеют больше функций, чем мне нужно, но я не вижу поддержки OAUTH как “рекламируемой” функции (замечание: я не хочу получать электронные письма или проверять их, и мне не нужна графическая оболочка) – каков самый простой способ этого добиться?

Я предпочел бы бесплатное и открытое программное обеспечение, а также относительно простое в настройке/конфигурации, в таком порядке по приоритетам.

Принятый, и крайне хорошо написанный, ответ на StackOverflow здесь описывает, как сделать это на Python – без понижения настроек безопасности, так что все, что вам нужно сделать, это:

  1. следовать инструкциям для получения вашего токена
  2. адаптировать раздел о отправке почты в скрипт, который принимает адрес электронной почты, заголовок и сообщение в качестве входных данных (убедитесь, что ваш скрипт начинается с python shebang #!/usr/bin/env pythonесли вы используете Windows, убедитесь, что имя вашего скрипта заканчивается на .py)
  3. разместить скрипт где-то в вашем пути, или в месте, откуда вы собираетесь его запускать, и
  4. установить его как исполняемый с помощью chmod +x/path/to/your/script (вы можете пропустить это, если используете Windows)

Это решение:

  • Использует стандартный протокол OAuth 2.0.
  • Бесплатно и открыто.
  • Должно работать на любом компьютере/ОС, где установлен Python и который подключен к интернету. Raspberrian имеет Python, как и большинство компьютеров на Linux, OS/X и его можно установить на Windows

Я только что натолкнулся на вашу тему и, возможно, не совсем правильно понимаю ваши требования. Но если я понял правильно, я думаю, вы можете использовать git для отправки электронных писем с помощью Google Oauth2.

$ git send-email --smtp-pass your-Oauth2-app-pwd 
                 --smtp-user [email protected] 
                 --smtp-server smtp.gmail.com 
                 --smtp-encryption tls 
                 --smtp-server-port 587 
                 --to [email protected]
                 mail-content.txt

Вот как я отправляю патчи, используя свой адрес электронной почты Google.

«git send-email –smtp-pass your-Oauth2-app-pwd» не поможет автору запроса делать скрипты, потому что «your-Oauth2-app-pwd» – это то, что должно быть сгенерировано. Например, msmtprc содержит строку «passwordeval oama access [email protected]», где oama – это инструмент oauth2, который использует GPG. oama, вероятно, можно использовать в вашем примере git, если его запустить из командной строки. Однако это не будет работать без значительных изменений в серверной ситуации, потому что не может быть никаких запросов. Мне любопытно – как вы сгенерировали «your-Oauth2-app-pwd»?

Ответ или решение

Для отправки электронных писем через Gmail с помощью OAUTH 2.0 на Raspberry Pi с использованием командной строки (CLI) вам подойдут несколько методов. Рассмотрим один из наиболее простых и одновременно безопасных способов с использованием Python и его библиотеки smtplib в сочетании с google-auth для аутентификации через OAUTH 2.0.

Подготовка к отправке писем через Gmail с OAUTH 2.0

1. Создание проекта в Google Cloud Console

  1. Перейдите на Google Cloud Console.
  2. Создайте новый проект.
  3. Включите API Gmail для вашего проекта.
  4. Перейдите к разделу “Credentials” и создайте учетные данные типа “OAuth 2.0 Client IDs”.
  5. Укажите http://localhost в качестве URI перенаправления (это временно).
  6. Сохраните ваш Client ID и Client Secret.

2. Установка необходимых библиотек

Убедитесь, что у вас установлен Python и пакетный менеджер pip. Воспользуйтесь следующей командой для установки необходимых библиотек:

pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client

3. Получение токена доступа

Для получения токена доступа выполните следующий скрипт:

from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
import os

# Необходимые области доступа
SCOPES = ['https://www.googleapis.com/auth/gmail.send']

def main():
    creds = None
    # Файл токена
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    # Если нет действительных учетных данных, позвоним пользователю для входа в систему.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Сохранение токена для следующего запуска
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

if __name__ == '__main__':
    main()

После выполнения этого скрипта у вас будет файл token.json, содержащий ваш токен доступа.

4. Отправка письма

Теперь вы можете использовать следующий скрипт для отправки электронного письма:

import base64
from email.mime.text import MIMEText
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build

def send_email(to, subject, message_text):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    service = build('gmail', 'v1', credentials=creds)

    message = MIMEText(message_text)
    message['to'] = to
    message['subject'] = subject
    raw = base64.urlsafe_b64encode(message.as_bytes()).decode()
    body = {'raw': raw}
    service.users().messages().send(userId='me', body=body).execute()

if __name__ == '__main__':
    send_email('recipient@example.com', 'Тема письма', 'Текст сообщения')

Настройка скрипта для командной строки

  1. Сохраните оба скрипта в одном каталоге.
  2. Убедитесь, что скрипт отправки письма имеет права на выполнение:
chmod +x send_email.py
  1. Теперь вы можете вызывать скрипт с параметрами (при необходимости добавьте возможность передачи параметров via sys.argv).

Альтернативный способ: Использование msmtp

Еще одним простым вариантом является использование msmtp, который поддерживает OAUTH 2.0 через специальные конфигурации. Вам нужно будет настроить файл конфигурации .msmtprc.

account gmail
host smtp.gmail.com
port 587
from your-email@gmail.com
auth on
user your-email@gmail.com
passwordeval "oauth2-tool --your-oauth-token"
tls on
tls_starttls on

Для установки msmtp используйте:

sudo apt-get install msmtp msmtp-mta

После настройки msmtp, вы сможете отправлять письма с помощью командной строки:

echo "Текст сообщения" | msmtp --account=gmail recipient@example.com

Заключение

Как видно, вы можете отправить электронное письмо через Gmail с использованием OAUTH 2.0, используя Python или msmtp. Оба подхода соответствуют требованиям безопасности и легко интегрируются в автоматизированные сценарии. Выберите тот, который лучше всего соответствует вашим потребностям и уровню комфорта с инструментами.

Оцените материал
Добавить комментарий

Капча загружается...