Fügen Sie der Webanwendung, die unter Erstellen einer serverlosen Webanwendung mit AWS erstellt wurde, ein E-Mail-Formular hinzu. Es besteht aus zwei Teilen, und ich denke, es ist besser, zuerst das Frontend zu betrachten. Zusätzliches E-Mail-Formular zur serverlosen Webanwendung ~ Frontend ~
Da die Basis-Webanwendung AppSync verwendet, ist AppSync auch das Mittel, um Lambda anzurufen und E-Mails vom Front-End zu senden.
Fügen Sie beim Erstellen einer neuen Lambda-Funktion "Amazon SNS-Veröffentlichungsrichtlinie" bei der Auswahl und Erstellung von Ausführungsrollen hinzu.
Fügen Sie dem bereits verwendeten AppSync eine IF hinzu, die Lambda aufruft. Der folgende Artikel, den ich neulich geschrieben habe, wird sofort nützlich sein. Rufen Sie Lambda mit AppSync an
Fügen Sie der Datenquelle das obige Lambda hinzu, fügen Sie dem Schema eine IF hinzu, die der folgenden ähnelt, und hängen Sie sie an den Resolver an.
input ProcessSendMailInput {
name: String!
email: String!
message: String!
}
type ProcessSendMailResult @aws_cognito_user_pools {
statusCode: Int!
body: String
}
type Mutation {
processSendMail(input: ProcessSendMailInput!): ProcessSendMailResult
@aws_cognito_user_pools
:
Wir richten einen SNS ein, um Sie per E-Mail über die über AppSync gesendeten Inhalte zu informieren.
Zumindest scheint es gut, nur den Namen einzugeben.
Erstellen Sie ein Abonnement für das von Ihnen erstellte Thema. Das Protokoll lautet "E-Mail" und der Endpunkt ist "Ziel-E-Mail-Adresse". Wenn Sie ein Abonnement erstellen, wird eine Bestätigungs-E-Mail an die E-Mail-Adresse gesendet, die Sie für Ihren Endpunkt angegeben haben. Wenn Sie im Text der E-Mail den Link "Abonnement bestätigen" auswählen, wird das Abonnement authentifiziert und der Status ändert sich von "Ausstehende Bestätigung" in "Bestätigt".
Sie können eine Test-E-Mail über "Issue Message" oben rechts im Themenbildschirm senden. Überprüfen Sie diese daher unbedingt. Außerdem wird die ARN in den Themendetails später im Programm verwendet.
Dies ist ein Python-Code, der Sie über SNS über den über AppSync gesendeten Inhalt benachrichtigt.
lambda_function.py
import boto3
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
sns = boto3.client("sns")
TOPIC_ARN = "arn:aws:sns:ap-northeast-1:888888888888:sample_sns_topic"
REQUEST_BODY_TEMPLATE = """
name : {0}
email : {1}
message :
{2}
"""
def lambda_handler(event, context):
try:
logger.info(event)
name = event["input"]["name"]
email = event["input"]["email"]
message = event["input"]["message"]
requestBody = REQUEST_BODY_TEMPLATE.format(name, email, message)
logger.info(requestBody)
request = {
"TopicArn": TOPIC_ARN,
"Message": requestBody,
"Subject": "mail from form by {0}".format(name)
}
response = sns.publish(**request)
return {
"statusCode": 200,
"body": json.dumps("Email sent successfully.")
}
except Exception as e:
logger.exception(e)
return {
"statusCode": 500,
"body": json.dumps(e)
}
Es wird in Front-End-Bias beschrieben.
Das Mailformular war einfacher als ich erwartet hatte. Allein damit beträgt die Anzahl der Schritte etwa 1,0H. Ich denke jedoch, dass ein separater Mechanismus erforderlich ist, um Manipulationen zu verhindern.
Ich denke darüber nach, den reCAPTCHA-Dienst von Google zu verwenden. Ich werde es wieder schreiben, wenn ich es das nächste Mal vorstelle.