使用RDS数据库的SMTP邮件系统

SMTP email system using RDS database

上下文是我的代码:

import pymysql
import os
import smtplib
from email.message import EmailMessage

# RDS config
endpoint = '**************'
username = '*****'
password = '*********'
database_name = '**********'

#connection config

connection = pymysql.connect(host=endpoint,user=username,passwd=password,db=database_name)

def handler(event, context):
    cursor = connection.cursor()
    cursor.execute('SELECT `Presenters`.Email FROM `Main` INNER JOIN `Presenters` ON `Main`.`PresenterID` = `Presenters`.`PresentersID` WHERE `Main`.`Read Day` ="Wednesday"')

    rows = cursor.fetchall()
    
    for row in rows:
        print("{0}".format(row[0]))
    
    EMAIL_ADDRESS = "***********"
    EMAIL_PASSWORD = "*********"
        
    msg = EmailMessage()
    msg['Subject'] = "***********"
    msg['From'] = EMAIL_ADDRESS
    msg['To'] = ["{0}".format(row[0]),]
        
    msg.set_content('**************')
        
    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
        smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
        smtp.send_message(msg)

系统工作正常,主要是 mysql 查询从 RDS 数据库检索一系列电子邮件并将它们提供给收件人变量,但它似乎只将电子邮件发送到其中一个电子邮件而不是 both/all 其中。

如果有帮助,这里是 lambda 函数的输出日志:

Test Event Name
test

Response
null

Function Logs
START RequestId: cd5e4bd8-28fc-4a0f-af0c-5f8608b46a57 Version: $LATEST
placeholder@email.example
placeholder@email.example
END RequestId: cd5e4bd8-28fc-4a0f-af0c-5f8608b46a57
REPORT RequestId: cd5e4bd8-28fc-4a0f-af0c-5f8608b46a57  Duration: 2036.07 ms    Billed Duration: 2037 ms    Memory Size: 128 MB Max Memory Used: 43 MB  Init Duration: 153.63 ms

Request ID
cd5e4bd8-28fc-4a0f-af0c-5f8608b46a57

您需要遍历所有 rows 以将电子邮件发送给每个 row 中定义的收件人。目前,您正在使用单个 row 的数据发送一封电子邮件。以下应该对您有用 -

def handler(event, context):
    cursor = connection.cursor()
    cursor.execute('SELECT `Presenters`.Email FROM `Main` INNER JOIN `Presenters` ON `Main`.`PresenterID` = `Presenters`.`PresentersID` WHERE `Main`.`Read Day` ="Wednesday"')

    rows = cursor.fetchall()
    
    for row in rows:
        print("{0}".format(row[0]))
    
    EMAIL_ADDRESS = "***********"
    EMAIL_PASSWORD = "*********"

    for row in rows:
        msg = EmailMessage()
        msg['Subject'] = "***********"
        msg['From'] = EMAIL_ADDRESS
        msg['To'] = ["{0}".format(row[0]),]
            
        msg.set_content('**************')
            
        with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
            smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
            smtp.send_message(msg)