如何使用 csv 文件向个人发送电子邮件?
How do I email individuals with csv files?
我是 python 的新手,我正在尝试编写一个代码,它将获取一个 csv 文件并通过电子邮件发送一行中的所有电子邮件,同时每次都切换名称。这是我写的:
import smtplib
import csv
def nobrackets(current):
return str(current).replace('[','').replace(']','')
def noastrick(current):
return str(current).replace('\'','').replace('\'','')
sender_email = "xxxxxxxxx"
password = "xxxxxxxxx"
names=[]
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, password)
print("Login success")
with open('Emails.csv','r') as csv_file:
csv_reader=csv.reader(csv_file)
for line in csv_reader:
names.append(line[0])
message=('Hey', noastrick(nobrackets(names)),'how are you doing?')
server.sendmail(sender_email, line, message)
names.clear()
问题是,我成功登录了,但随后我收到了一堆关于 File/System/Library 的文本,它给了我错误:类型错误:预期的字符串或缓冲区。
有人知道这是怎么回事吗?
使用时
server.sendmail(sender_email, line, message)
message
可能是包含ASCII范围内字符的字符串,也可能是字节串。 from smtplib.sendmail
但是,在您的代码中,message
是一个元组。将其转换为字符串,您应该可以开始了。例如:
server.sendmail(sender_email, line, " ".join(message))
如果您 post 完整的错误消息可能会有所帮助。话虽这么说,只是猜测,它可能与您的消息字符串有关 - 看起来您传递的是元组作为消息而不是字符串。
而不是:
message=('Hey', noastrick(nobrackets(names)),'how are you doing?')
也许试试:
message=(f'嘿 {noastrick(nobrackets(names))} 你好吗?')
建议使用 f 字符串字面值来制作一个字符串,将您的函数结果作为字符串直接插入到字符串中,因此您的消息变量将包含一个字符串而不是一个元组。
我是 python 的新手,我正在尝试编写一个代码,它将获取一个 csv 文件并通过电子邮件发送一行中的所有电子邮件,同时每次都切换名称。这是我写的:
import smtplib
import csv
def nobrackets(current):
return str(current).replace('[','').replace(']','')
def noastrick(current):
return str(current).replace('\'','').replace('\'','')
sender_email = "xxxxxxxxx"
password = "xxxxxxxxx"
names=[]
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, password)
print("Login success")
with open('Emails.csv','r') as csv_file:
csv_reader=csv.reader(csv_file)
for line in csv_reader:
names.append(line[0])
message=('Hey', noastrick(nobrackets(names)),'how are you doing?')
server.sendmail(sender_email, line, message)
names.clear()
问题是,我成功登录了,但随后我收到了一堆关于 File/System/Library 的文本,它给了我错误:类型错误:预期的字符串或缓冲区。 有人知道这是怎么回事吗?
使用时
server.sendmail(sender_email, line, message)
message
可能是包含ASCII范围内字符的字符串,也可能是字节串。 from smtplib.sendmail
但是,在您的代码中,message
是一个元组。将其转换为字符串,您应该可以开始了。例如:
server.sendmail(sender_email, line, " ".join(message))
如果您 post 完整的错误消息可能会有所帮助。话虽这么说,只是猜测,它可能与您的消息字符串有关 - 看起来您传递的是元组作为消息而不是字符串。
而不是: message=('Hey', noastrick(nobrackets(names)),'how are you doing?')
也许试试: message=(f'嘿 {noastrick(nobrackets(names))} 你好吗?')
建议使用 f 字符串字面值来制作一个字符串,将您的函数结果作为字符串直接插入到字符串中,因此您的消息变量将包含一个字符串而不是一个元组。