[PYTHON] Mail-Formular zur serverlosen Webanwendung hinzufügen ~ Backend-Version ~

Mail-Formular zur serverlosen Webanwendung hinzufügen ~ Backend-Version ~

Einführung

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 ~

Backend

Da die Basis-Webanwendung AppSync verwendet, ist AppSync auch das Mittel, um Lambda anzurufen und E-Mails vom Front-End zu senden.

Erstellen einer Lambda-Funktion

Fügen Sie beim Erstellen einer neuen Lambda-Funktion "Amazon SNS-Veröffentlichungsrichtlinie" bei der Auswahl und Erstellung von Ausführungsrollen hinzu. Screenshot 2020-03-29 at 08.53.11.png

IF für Lambda-Aufrufe an AppSync hinzugefügt

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
 :

AWS SNS-Einstellungen

Wir richten einen SNS ein, um Sie per E-Mail über die über AppSync gesendeten Inhalte zu informieren.

Ein Thema erstellen

Zumindest scheint es gut, nur den Namen einzugeben. Screenshot 2020-03-29 at 10.05.32.png

Erstellen Sie ein Abonnement

Erstellen Sie ein Abonnement für das von Ihnen erstellte Thema. Das Protokoll lautet "E-Mail" und der Endpunkt ist "Ziel-E-Mail-Adresse". ink.png 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. ink (1).png 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.

Implementierung der Lambda-Funktion

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)
        }

Rufen Sie AppSync vom Frontend aus auf

Es wird in Front-End-Bias beschrieben.

Nachwort

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.

Recommended Posts

Mail-Formular zur serverlosen Webanwendung hinzufügen ~ Backend-Version ~
Fügen Sie Formularobjekten mit Django dynamisch Felder hinzu
Schritte zum Entwickeln einer Webanwendung in Python