2017-07-31 15 views
0

電子メールを受信し、そのメタデータをスクリプトに送信して処理するアプリエンジンアプリがあります。それはうまくいく。コードは以下の通りで、Githubの例でGoogleから提供されています。Google App Engine:メールを受信して​​/転送しますか?

しかし、このスクリプト(またはApp Engine)で受け取ったメールを別のメールアドレスに転送するにはどうすればよいですか。

Gmailを使用して電子メールを転送しているクライアントでは、私が人間の管理者として承認できるように転送要求を受け取る必要があります。

import webapp2 
import logging 
import urllib 
import json 

from google.appengine.ext.webapp.mail_handlers import InboundMailHandler 
from google.appengine.api import urlfetch 


class HandleEmail(InboundMailHandler): 
    def receive(self, message): 

     # parse out fields 
     to = message.to 
     sender = message.sender 
     cc = getattr(message, 'cc', '') 
     date = message.date 
     subject = message.subject 

     # Original message, as a python email.message.Message 
     original = str(message.original) 

     html_body = '' 
     for _, body in message.bodies('text/html'): 
      html_body = body.decode() 

     plain_body = '' 
     for _, plain in message.bodies('text/plain'): 
      plain_body = plain.decode() 

     # Attachements are EncodedPayload objects, see 
     # https://code.google.com/p/googleappengine/source/browse/trunk/ 
     # python/google/appengine/api/mail.py#536 
     attachments = [{ 
         'filename': attachment[0], 
         'encoding': attachment[1].encoding, 
         'payload': attachment[1].payload 
         } 
         for attachment 
         in getattr(message, 'attachments', [])] 

     # logging, remove what you find to be excessive 
     logging.info('sender: %s', sender) 
     logging.info('to: %s', to) 
     logging.info('cc: %s', cc) 
     logging.info('date: %s', date) 
     logging.info('subject: %s', subject) 
     logging.info('html_body: %s', html_body) 
     logging.info('plain_body: %s', plain_body) 
     logging.info('attachments: %s', [a['filename'] for a in attachments]) 

     # POST (change to your endpoint, httpbin is cool for testing though) 
     # url = 'http://httpbin.org/post' 
     url = 'https://myapp.appspot.com/receiver.php' 

     form_fields = urllib.urlencode({ 
      'sender': sender.encode('utf8'), 
      'to': to.encode('utf8'), 
      'cc': cc.encode('utf8'), 
      'date': date.encode('utf8'), 
      'subject': subject.encode('utf8'), 
      'html_body': html_body.encode('utf8'), 
      'plain_body': plain_body.encode('utf8'), 
      'original': original.encode('utf8'), 
      'attachments': json.dumps(attachments) 
     }) 

     headers = { 
      'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' 
     } 

     result = urlfetch.fetch(url=url, 
           method=urlfetch.POST, 
           payload=form_fields, 
           headers=headers) 

     # log more 
     logging.info('POST to %s returned: %s', url, result.status_code) 
     logging.info('Returned content: %s', result.content) 

application = webapp2.WSGIApplication([HandleEmail.mapping()], debug=True) 
+0

これはお探しですか? https://cloud.google.com/appengine/docs/standard/python/mail/sending-mail-with-mail-api –

+0

私ですか?私は私だと思います。 「フォワーディング」は、エンドユーザーがasでそれを参照するものです。しかし、私はバックエンドがメッセージを受信して​​、それを送信していると思います。私は電子メールについてあまり知らないので、プロトコルレベルで "転送"などのことがなければ、これはそれです。 – Warren

+0

私はあなた自身の質問に答えてきたと信じています:あなただけがあなたのコマンドに基づいて電子メールを "転送/送信"することができるので、 –

答えて

0

前述のように、mail.send_mail()関数を使用すると、現在のクラスでこれを実現できます。

from google.appengine.api import app_identity #[ If you want current user as the sender ] 
from google.appengine.api import mail 

def forward_mail(sender_address,forward_address,original_message,html_body,original_attachments): 
    # [START forward_mail] 
    message = mail.EmailMessage(
     sender= sender_address, 
     subject= original_message.subject, 
     to = forward_address, 
     sender = original_message.sender, 
     body = html_body, 
     attachments = original_attachments 
    ) 

    message.send() 
    # [END forward_mail] 

この関数をHandleEmailクラスで呼び出します。

希望します。

関連する問題