电子邮件发送者python bot,可向多个收件人发送电子邮件,并在邮件中显示其姓名
我有一个csv文件,其中一列是名称,另一列是电子邮件。我必须将邮件发送给csv中列出的所有成员,并在邮件的“姓名”列中注明他们的姓名。还有一些名字没有电子邮件,所以我想忽略这个名字。 所以,我尝试了这个代码。它将分别向每个成员发送电子邮件,但向每个电子邮件地址发送相同的名称,即最后一个名称 谁能帮我解决这个问题电子邮件发送者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
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
启用详细调试并链接到结果成绩单的粘贴吗?你能详细告诉我如何启用吗?