Парсинг входящей почты с Google App Engine? - PullRequest
4 голосов
/ 06 марта 2009

У нас есть настройки почты с приложениями Google. Мы хотим иметь возможность запускать регулярные выражения для входящей почты и обрабатывать эту информацию.

Возможно ли это сегодня с Google App Engine? Предоставляет ли Google какую-то инфраструктуру, которая может это сделать?

Ответы [ 6 ]

11 голосов
/ 17 апреля 2010

из гугл документации здесь :

Получение почты

Ваше приложение может получать электронную почту по адресам следующей формы:

string@appid.appspotmail.com

Обратите внимание, что даже если ваше приложение развернуто в пользовательском домене, оно не может получать сообщения электронной почты, отправленные на адреса этого домена. Сообщения электронной почты отправляются в ваше приложение как HTTP-запросы. Эти запросы генерируются App Engine и публикуются в вашем приложении. В конфигурации вашего приложения вы указываете обработчики, которые будут вызываться для обработки этих HTTP-запросов. В ваших обработчиках вы получаете данные MIME для сообщений электронной почты, которые затем разбираются в отдельных полях.

Сообщения электронной почты отправляются в ваше приложение как HTTP POST-запросы, используя следующий URL:

/_ah/mail/address

где адрес - полный адрес электронной почты, включая имя домена. Возможность получать почту в вашем приложении по умолчанию отключена. Чтобы приложение могло получать почту, вы должны указать, что хотите включить эту службу в файле app.yaml, включив в него следующее:

inbound_services:
- mail

Python SDK определяет InboundMailHandler, класс веб-приложения для обработки входящей электронной почты. Чтобы использовать InboundMailHandler, вы наследуете его и переопределяете метод receive (). Метод receive () вызывается с аргументом класса InboundEmailMessage, другого класса, определенного в Python SDK.

InboundMailHandler находится в пакете google.appengine.ext.webapp.mail_handlers. Вы можете создать экземпляр InboundEmailMessage следующим образом:

import logging, email
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler 
from google.appengine.ext.webapp.util import run_wsgi_app

class LogSenderHandler(InboundMailHandler):
    def receive(self, mail_message):
        logging.info("Received a message from: " + mail_message.sender)

Объект InboundEmailMessage включает атрибуты для доступа к другим полям сообщения:

subject contains the message subject.
sender is the sender's email address.
to is a list of the message's primary recipients.
cc contains a list of the cc recipients.
date returns the message date.
attachments is a list of file attachments, possibly empty. Each value in the list is a tuple of two elements: the filename and the file contents.
original is the complete message, including data not exposed by the other fields such as email headers, as a Python email.message.Message.
4 голосов
/ 09 января 2011
3 голосов
/ 06 марта 2009

Обновление: теперь поддерживается .

Обработка входящих писем пока не поддерживается. Однако на их дорожной карте: http://code.google.com/appengine/docs/roadmap.html

2 голосов
/ 06 марта 2009

Google в настоящее время не поддерживает обработку электронной почты в App Engine, хотя она включена в план. В то же время, такие службы, как smtp2web будут обрабатывать его для вас (отказ от ответственности: я написал smtp2web).

0 голосов
/ 05 июня 2017

В качестве другого варианта ответа от Габриэля, я бы рекомендовал использовать go окружение App Engine вкл Отправка и получение почты с помощью Mail API .

Из документации:

Получение почты

Ваше приложение может получать электронную почту по адресам следующей формы:

anything@appid.appspotmail.com

Сравните с конфигурацией обработки входящей почты в python, как обсуждалось здесь , включение входящей почты в файле app.yaml вашего приложения довольно простое :

inbound_services:
- mail

Назовите файл приложения как mail.go, затем зарегистрируйте обработчик по пути /_ah/mail/ и прочитайте данные электронного письма из *http.Requestlike, используя net/mail, например:

func incomingMail(w http.ResponseWriter, r *http.Request) {
        ctx := appengine.NewContext(r)
        defer r.Body.Close()
        var b bytes.Buffer
        if _, err := b.ReadFrom(r.Body); err != nil {
                log.Errorf(ctx, "Error reading body: %v", err)
                return
        }
        log.Infof(ctx, "Received mail: %v", b)
}

Отправка почты

Следуйте этому руководству , чтобы зарегистрировать электронные письма отправителя как авторизованные отправители

Используйте тип mail.Message, чтобы указать отправителя, получателя, тему и текст сообщения.
Отправьте электронное письмо с функцией mail.Send.

func confirm(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)
    addr := r.FormValue("email")
    url := createConfirmationURL(r)
    msg := &mail.Message{
        Sender:  "Example.com Support <support@example.com>",
        To:      []string{addr},
        Subject: "Confirm your registration",
        Body:    fmt.Sprintf(confirmMessage, url),
    }
    if err := mail.Send(ctx, msg); err != nil {
        log.Errorf(ctx, "Couldn't send email: %v", err)
    }
}

Развертывание

Полный пример кода получения и отправки доступен здесь, на GitHub:

GoogleCloudPlatform / golang-образцы / документы / AppEngine / почта / mail.go

Чтобы клонировать пример кода, перейдите к Console. Нажмите кнопку, чтобы открыть Cloud Shell: enter image description here затем аналогично этому быстрому запуску введите следующие шаги:

$ SOURCEDIR=https://github.com/GoogleCloudPlatform/golang-samples.git
$ TUTORIALDIR=~/src/your-application-id/go_gae_samples
$ git clone $SOURCEDIR $TUTORIALDIR
$ cd $TUTORIALDIR
$ git checkout master
$ cat docs/appengine/mail/app.yaml
$ cat docs/appengine/mail/mail.go
$ goapp serve docs/appengine/mail/app.yaml

Отсюда вы можете получить доступ к приложению через порт 8080, используя Web previewWeb preview.
Для завершения нажмите Ctrl+C в Cloud Shell.
Наконец вы можете развернуть свое приложение

goapp deploy -application your-application-id -version 0

Нажмите на ссылку, чтобы перейти на него

http://your-application-id.appspot.com/

Затем отправьте письмо на anything@your-application-id.appspotmail.com, посмотрите, работает ли оно.

0 голосов
/ 06 марта 2009

Вы можете настроить учетную запись электронной почты и иметь внешний сервер (тот, который вы создаете и размещаете вне AE) для доступа к учетной записи Gmail через IMAP. Затем ваш «почтовый сервер» читает сообщения и получает доступ к / email API вашего приложения в AE.

В Python есть модуль электронной почты, поэтому вы можете публиковать там все сообщение или, если оно не работает (из-за каких-либо ограничений), вы можете предварительно обработать его на своем почтовом сервере и опубликовать упрощенную версию в своем приложении.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...