こんにちは、sendmail経由でメールを送信することを延期しようとしています。 メールは問題ありません。 deferred.defer(send_invitation,recipient)
を試すとすぐに動作を停止します。Google App Engineがデフォルトのタスクキューにsendmailジョブを延期できず、不正な送信者エラーを受信しました
私が最大にタスクを再試行を見ることができるが制限を許可し、ログが表示さ:これはsendmailのジョブはデフォルトキュー(または任意のキュー)に送信される場合、それはノーであること
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/mail.py", line 1136, in send
raise ERROR_MAP[e.application_error](e.error_detail)
InvalidSenderError: Unauthorized sender
意味しています新しい送信者(つまりキュー)が承認されていないことを確認してください。
deferred.defer
を使用しないと、プロジェクトオーナーの電子メールとデフォルトのappengineサービスアカウントの両方でメールが送信されます。どちらのアカウントにもアクセス許可/ロールが必要です。
import webapp2
from google.appengine.ext import deferred
import jinja2
import os
import datetime
from google.appengine.api import users, mail
recipient ='[email protected]'
user = users.GetCurrentUser().email()
print "THIS IS THE CURRENT USER %s" %user
def send_invitation(recipient):
print "In the def user email is %s" %user
mail.send_mail(sender=user,to=recipient, subject='You\'re invited!',body='''You have been invited to join our community...''')
class SendInvitationHandler(webapp2.RequestHandler):
print "This is user within the class %s" %user
def get(self):
user = users.GetCurrentUser().email()
tempalte_env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.getcwd()))
current_time = datetime.datetime.now()
template = tempalte_env.get_template('invitation.html')
message = "<p>%s, and an invitation to %s has been deferred from %s</p>" % (datetime.datetime.now(),recipient, user)
context = {'recipient': recipient,
'message': message,
'current_time': current_time,
'user': user
}
self.response.out.write(template.render(context))
deferred.defer(send_invitation,recipient)
app = webapp2.WSGIApplication([('/sendinvite', SendInvitationHandler)], debug=True)
変更ラインdeferred.defer(send_invitation,recipient)
send_invitation(recipient)
に、それが動作します...延期タスクが異なる要求に応答して別のハンドラで実行
関連注記:あなたの特定のケースでは、あなたは、
recipient
に加えて、だけでなく、このような何かをuser
を渡す必要がグローバルがでpythonであなたの友人ではありません特に一般的なものとGAEのものがあります。異なるインスタンスで実行しているときには異なる場合があります。したがって、注意して使用してください(またはすべてを避ける)。 –上記を試してみて、あなたが辞書を使って編集した提案をお勧めします。しかし悲しいことに違いはありません。同じエラー。 invitation.send_invitation(受取人、ユーザ)は問題ありません...しかし、deffered.defer(受取人、ユーザ)と同じ振る舞い –
変更された 'send_invitation'引数リストに気付いていませんか? 'deferred.defer'には3つのパラメータが必要です.2つではありません。また、以前に遅延されたタスクを削除したことを確認してください。再試行されても失敗することがあります。 –