Warm tip: This article is reproduced from serverfault.com, please click

python-尝试发送电子邮件时从Excel列表执行行时出错

(python - Error when executing rows from excel list when trying to send emails)

发布于 2020-11-27 13:05:50

我正在建立一个邮件发件人,我想一次接收一封电子邮件,而不是将所有收据都添加到密件抄送中。

因此,使用下面的代码,我想使其一次从.xlsx列表中添加一封电子邮件,将其添加到“ TO”并发送电子邮件,然后在.xlsx文件的下一行重复。

我有一个看起来像这样的代码:

import pandas as pd

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

email_list = pd.read_excel('/home/xxxx/test.xlsx')

emails = email_list['EMAIL']
email_list['EMAIL'] = email_list.index

my_list = email_list['EMAIL'].tolist()
print(my_list)


msg = MIMEMultipart()
msg['From'] = "test@xxxx.com"
msg['To'] = ",".join(str(my_list))
msg['Subject'] = "This is the subject"

message = """
<html><p>randomtext</p></html>
"""
message2 = "plain text msg"
msg.attach(MIMEText(message,'html'))
msg.attach(MIMEText(message2,'plain'))
Password = "thisispassword"
server = smtplib.SMTP('smtp.mail.com:587')
#server.ehlo()
server.starttls()
server.login(msg['From'],Password)
server.sendmail(msg['From'],msg['To'],msg.as_string())

server.quit()

相反,我得到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/seniori/anaconda3/lib/python3.8/smtplib.py", line 885, in sendmail
    raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'[,0,,, ,1,,, ,2,]': (501, b'<[,0,,, ,1,,,=,2,]>: missing or malformed local part')} 

似乎是在excel文件中找到行,但没有找到电子邮件地址。

对我需要在此处进行更改的任何想法吗?

编辑:这是总错误日志

Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> 
>>> from email.mime.multipart import MIMEMultipart
>>> from email.mime.text import MIMEText
>>> import smtplib
>>> 
>>> email_list = pd.read_excel('/home/xxxxx/test.xlsx')
>>> 
>>> emails = email_list['EMAIL']
>>> email_list['EMAIL'] = email_list.index
>>> 
>>> my_list = email_list['EMAIL'].tolist()
>>> print(my_list)
[0, 1, 2]
>>> 
>>> 
>>> msg = MIMEMultipart()
>>> msg['From'] = "mail@example.org"
>>> msg['To'] = ",".join(str(my_list))
>>> msg['Subject'] = "subject"
>>> 
>>> message = """
... <html><p>randomtext</p></html>
... """
>>> message2 = "plain text msg"
>>> msg.attach(MIMEText(message,'html'))
>>> msg.attach(MIMEText(message2,'plain'))
>>> Password = "Wenglish2.1"
>>> server = smtplib.SMTP('mail@example.org')
[proxychains] Dynamic chain  ...  127.0.0.1:9050  ...  127.0.0.1:9050 <--denied
[proxychains] Dynamic chain  ...  127.0.0.1:9050  ...  mail@example.org:587  ...  OK
>>> #server.ehlo()
>>> server.starttls()
(220, b'TLS go ahead')
>>> server.login(msg['From'],Password)
(235, b'Authentication succeeded')
>>> server.sendmail(msg['From'],msg['To'],msg.as_string())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/seniori/anaconda3/lib/python3.8/smtplib.py", line 885, in sendmail
    raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'[,0,,, ,1,,, ,2,]': (501, b'<[,0,,, ,1,,,=,2,]>: missing or malformed local part')}
>>> 
>>> server.quit()
(221, b'xxxx.xxxx.com closing connection')
>>> 

电子邮件列表位于UTF-8 excel .xlsx文件中,如下所示:

EMAIL
test@gmail.com
test1@gmail.com
test2@gmail.com
Questioner
garymaker
Viewed
11
garymaker 2020-11-28 17:15:53

我通过执行以下操作对其进行了整理:

for i in range(0,len(emails)):
    msg['To'] = my_list[i]
    server.sendmail(msg['From'],msg['To'],msg.as_string())
    del msg['To']

这是一个循环并一次从excel工作表发送一封电子邮件。