Анализируете входящую почту с помощью Google App Engine?

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

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


person Community    schedule 05.03.2009    source источник


Ответы (6)


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

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

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

[email protected]

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

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

/_ah/mail/address

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

inbound_services:
- mail

SDK Python определяет InboundMailHandler, класс webapp для обработки входящей электронной почты. Чтобы использовать 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.
person Gabriel    schedule 17.04.2010

handle_incoming_email.py
app.yaml

person Dustin Getz    schedule 09.01.2011

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

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

person Sam    schedule 05.03.2009
comment
Есть ли другие способы, которыми вы могли бы порекомендовать, как я подхожу к решению этой задачи? - person ; 06.03.2009
comment
Нет, на самом деле, я думаю, вы могли бы очистить почту от почтового клиента html, а затем использовать что-то вроде этого: schedulerservice.appspot .com / about Лучше всего либо использовать другую платформу, либо дождаться реализации дорожной карты. - person Sam; 06.03.2009

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

person Nick Johnson    schedule 06.03.2009
comment
ник, smtp2web все еще работает, Я продолжаю получать ошибки. Любая помощь была бы потрясающей :) - person Lance Pollard; 24.08.2010

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

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

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

person Richard Levasseur    schedule 06.03.2009
comment
Вам не разрешено использовать сокет lib, это остановит работу imap? - person Sam; 06.03.2009
comment
Я хочу сказать, что внешний сервер (который вы размещаете самостоятельно) не работает на движке приложения, поэтому он может получить доступ к библиотеке сокета. Я отредактировал ответ, чтобы он был понятнее - person Richard Levasseur; 06.03.2009

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

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

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

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

[email protected]

Сравните с конфигурацией обработки входящей почты в 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 <[email protected]>",
        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-samples / docs / appengine / mail / mail.go

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

$ 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 preview  Web preview .
Чтобы завершить, нажмите Ctrl+C в Cloud Shell.
Наконец, вы можете развернуть свое приложение

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

Щелкните URL-адрес, чтобы посетить его

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

Затем отправьте электронное письмо на [email protected], чтобы узнать, работает ли он.

person Chetabahana    schedule 05.06.2017