电子邮件发送者python bot,可向多个收件人发送电子邮件,并在邮件中显示其姓名

电子邮件发送者python bot,可向多个收件人发送电子邮件,并在邮件中显示其姓名,python,pandas,csv,email,smtp,Python,Pandas,Csv,Email,Smtp,我有一个csv文件,其中一列是名称,另一列是电子邮件。我必须将邮件发送给csv中列出的所有成员,并在邮件的“姓名”列中注明他们的姓名。还有一些名字没有电子邮件,所以我想忽略这个名字。 所以,我尝试了这个代码。它将分别向每个成员发送电子邮件,但向每个电子邮件地址发送相同的名称,即最后一个名称 谁能帮我解决这个问题 import numpy as np import matplotlib.pyplot as plt import pandas as pd import csv import smt

我有一个csv文件,其中一列是名称,另一列是电子邮件。我必须将邮件发送给csv中列出的所有成员,并在邮件的“姓名”列中注明他们的姓名。还有一些名字没有电子邮件,所以我想忽略这个名字。

所以,我尝试了这个代码。它将分别向每个成员发送电子邮件,但向每个电子邮件地址发送相同的名称,即最后一个名称

谁能帮我解决这个问题

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import csv
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email import *
from itertools import islice

df=pd.read_csv("emails.csv")
df.isnull()
df.isnull().sum()
df['email'].fillna("NO Email",inplace=True)

X=df.iloc[:,2].values
y=df.iloc[:,0].values


FROM= "mail@gmail.com"
TO=X
password=input("enter password:")
message= MIMEMultipart()
message['From'] = FROM
message['Subject'] = "subject line"
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(FROM,password)
for j in TO:
    if(j=="NO Email"):
        #i_iter=iter(i)
        print("No email found ")#+ next(islice(i_iter,1)))
        for i in y:
            #next(i_iter)
            print("Name skip")
         continue
     else:
        i=0
        for i in range(len(y)):
            message = MIMEText("""hii..........{}""".format(y[i]))
            #i+=1
        print("Login success")
        server.sendmail(FROM,j,message.as_string())
        print("email has been send to ",j)

您正在替换循环中的原始
邮件
,因此最终传递到
服务器的内容。sendmail
不是有效的电子邮件

也许你可以试试

从email.message导入EmailMessage
导入smtplib
导入日志记录
FROM=”mail@gmail.com"
使用smtplib.SMTP('SMTP.gmail.com',587)作为服务器:
server.starttls()
server.login(从,密码)
logging.info(“登录成功”)
对于地址,邮政编码中的收件人(X,y):
如果地址=“无电子邮件”:
日志记录。警告(“未找到电子邮件:%s”,收件人)
持续
message=EmailMessage()
消息['From']=来自
消息['Subject']=“主题行”
message.set_内容(““”hii………{}”“”。格式(收件人))
服务器。发送消息(消息)
logging.info(“电子邮件已发送给%s”,收件人)

请注意,我们如何使用
zip()
来对齐两列,并将随机
email
函数的杂乱组合替换为,第一个例子来自并且更切题地使用
logging
而不是
print
来获取诊断信息。

我认为Gmail将要求您执行
ehlo
——两次!STARTTLS之前一次,然后在之后一次。它会给出错误
SMTPServerDisconnected:如果我在运行的If条件之外编写continue,但只向一个人发送电子邮件,请先运行connect()
。请告诉我如何解决此问题。显然,不要将
continue
置于条件之外。你能为
smtplib
启用详细调试并链接到结果成绩单的粘贴吗?你能详细告诉我如何启用吗?