SMTP:邮件未通过AWS Glue Python作业发送

问题描述

我正在尝试通过AWS glue作业发送邮件邮件将具有从s3存储桶中获取的多个附件。根据日志,它一直运行到server.login()为止。 server.sendmail()函数失败。 以下是代码-

def sendEmail(TO,SUBJECT,BODY_HTML):
    msg = MIMEMultipart('alternative')
    msg['Subject'] = SUBJECT
    msg['From'] = SENDER
    msg['To'] = ','.join(RECIPIENT + TO)
    part1 = MIMEText(BODY_HTML,'html')
    msg.attach(part1)
    s3 = boto3.resource('s3')
    bucket = s3.Bucket('sample-bucket')
    for obj in bucket.objects.filter(Delimiter='/',Prefix='sample-folder/'):
        filename =  ((obj.key).split("/")[1])
        s3_object = s3_obj.s3_get_object(sample-bucket,'sample-folder/'+ filename)
        body = s3_object['Body'].read()
        part = MIMEApplication(body,filename)
        part.add_header("Content-disposition",'attachment',filename=filename)
        msg.attach(part)
    try:
        server = smtplib.SMTP(HOST,PORT)
        server.ehlo()
        server.starttls()
        server.ehlo()
        server.login(USERNAME_SMTP,PASSWORD_SMTP)
        server.sendmail(SENDER,RECIPIENT,msg.as_string()) ***--Error***
        server.close()
        print (msg)
        print ("Email sent")

我收到以下错误-

Error: (554,b'Transaction Failed: Expected \'=\',got "null"')

出了什么问题?

解决方法

我得到了答案。问题在于从s3中读取文件的方式。第一次迭代的输出是-

sample-bucket / sample-folder /

因此,它接受了一个空对象并且失败了。因此,我只是跳过了迭代过程中的第一个对象并完成了整个过程。有效。 请在下面找到最终代码-

def sendEmail(TO,SUBJECT,BODY_HTML):
    msg = MIMEMultipart('alternative')
    msg['Subject'] = SUBJECT
    msg['From'] = SENDER
    msg['To'] = ','.join(RECIPIENT + TO)
    part1 = MIMEText(BODY_HTML,'html')
    msg.attach(part1)
    s3 = boto3.resource('s3')
    bucket = s3.Bucket('sample-bucket')
    **it = iter(bucket.objects.filter(Delimiter='/',Prefix='sample-folder/'))
    next(it,None)
    for obj in it:**
        filename =  ((obj.key).split("/")[1])
        s3_object = s3_obj.s3_get_object(sample-bucket,'sample-folder/'+ filename)
        body = s3_object['Body'].read()
        part = MIMEApplication(body,filename)
        part.add_header("Content-Disposition",'attachment',filename=filename)
        msg.attach(part)
    try:
        server = smtplib.SMTP(HOST,PORT)
        server.ehlo()
        server.starttls()
        server.ehlo()
        server.login(USERNAME_SMTP,PASSWORD_SMTP)
        server.sendmail(SENDER,RECIPIENT,msg.as_string()) 
        server.close()
        print (msg)
        print ("Email sent")