2009-03-05 3 views
4

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

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

ответ

3

Обновление: сейчас supported.

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

+0

Есть ли какие-либо другие способы, по которым вы бы порекомендовали, как я иду на достижение этой задачи? – 2009-03-05 23:09:44

+0

Нет, я думаю, вы могли бы очистить почту от почтового клиента html, а затем использовать что-то вроде этого: http: //schedulerservice.appspot. com/about Лучше использовать другую платформу или дождаться реализации дорожной карты. – Sam

0

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

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

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

+0

Вам не разрешено использовать сокет lib, это остановит работу imap? – Sam

+0

Я хочу сказать, что внешний сервер (тот, который вы размещаете самостоятельно) не работает на движке приложения, поэтому он может получить доступ к сокету lib. Я отредактировал ответ, чтобы быть немного яснее –

2

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

+0

Thats довольно классный сервис. –

+1

Ник, работает ли smtp2web, [Я продолжаю получать ошибки] (http://stackoverflow.com/questions/3553246/are-there-any-smtp-to-http-free-services-email-to-post). Любая помощь будет потрясающей :) –

11

от Google документации here:

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

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

[email protected] 

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

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

/_ah/mail/address 

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

inbound_services: 
- mail 

Питон SDK определяет 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. 
0

В качестве другого варианта в answer от Габриэль Я бы рекомендовал использовать go окружающую среду App Engine на Sending and Receiving Mail with the Mail API.

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

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

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

[email protected] 

Compare к конфигурации на обработку входящей почты в python, как обсуждался here, позволяя входящую почту в файле 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) 
} 

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

Follow это guideline, чтобы зарегистрировать электронные письма отправителя как authorized senders

Используйте тип 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) 
    } 
} 

Deploy

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

GoogleCloudPlatform/golang-samples/docs/appengine/mail/mail.go

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

$ 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 

Нажмите URL, чтобы посетить его

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

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

Смежные вопросы