我在python中创建了一个脚本来发送带有附件的电子邮件。我把它放在databricks中,并把它放在一个时间表中。当我手动运行这个函数时,它只发送一封电子邮件,但当它按时间表运行时,它会发送给每个收件人。虽然这听起来像是一个时间表问题,但我相信这是一个代码问题--我在某个时候能够让它工作,但现在它又开始发送了。
如果有人能看一下下面的代码,看看他们是否能找出为什么它会重复,这将是不胜感激的!
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from datetime import date
def SendEmail(recipient, subject,message_records,attach,cc,bcc,df):
server = smtplib.SMTP ('smtp.sendgrid.net', 587) # check server and port with your provider
server.ehlo()
server.starttls()
server.login("apikey", dbutils.secrets.get(scope = "XXXX", key = "XXXX")) # insert secret name
sender = dbutils.secrets.get(scope = "XXXX", key = "XXXX") # insert secret name
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = "noreply@noreply.com"
msg['cc'] = ", ".join([cc])
msg['To'] = recipient
rcpt = bcc.split(",") +cc.split(",") + [recipient]
message = """
<html>
<body>
Good morning, <br> <br>
"""+message_records+"""<br> <br>
Thank you and have a wonderful day!
</body>
</html>
"""
if attach==1:
msg.attach(MIMEText(message,'html'))
filename = "ASN-" + str(date.today())+'.csv'
attachment = MIMEApplication(df.to_csv(index=False))
attachment["Content-Disposition"] = 'attachment; filename=" {}"'.format(filename)
msg.attach(attachment)
else:
msg.attach(MIMEText(message,'html'))
server.sendmail(sender, rcpt, msg.as_string())
server.close()```
1条答案
按热度按时间nuypyhwy1#
我建议你看一下python的SENDGRID库,它使用了从服务中获取的API密钥,并且是专门为这个服务构建的。
https://docs.sendgrid.com/for-developers/sending-email/v3-python-code-example
看看这段代码是否产生了您所看到的相同的重复问题。
如果我没记错的话,发送网格跟踪发送的邮件信息。确保“收件人”列表没有重复的地址。
我看不出上面的代码有任何明显的问题。
这是PyPi的链接,有很多关于用法的例子。
https://pypi.org/project/sendgrid/