如何使用csv文件向个人发送电子邮件?

2024-04-28 03:46:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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()

问题是,我成功登录,但随后我得到一堆关于文件/系统/库的文本,它给了我一个错误:TypeError:expected string或buffer。 有人知道发生了什么吗


Tags: 文件csvimportreturnservernamesemaildef
2条回答

如果您发布整个错误消息,可能会有所帮助。话虽如此,只是猜测一下,它可能与您的消息字符串有关——看起来您传递的是一个元组作为消息,而不是字符串

而不是: message=('Hey',noastrick(nobrackets(names)),'how you do do?')

或许可以尝试: 消息=(嘿{noastrick(nobrakets(名字))}你好吗?)

该建议使用一个f字符串文字来生成一个字符串,其中函数的结果作为字符串直接插入字符串中,因此消息变量将包含字符串而不是元组

使用时

server.sendmail(sender_email, line, message)

message可以是包含ASCII范围内字符的字符串,也可以是字节字符串from smtplib.sendmail

但是,在代码中,message是一个元组。把它转换成字符串,你就可以开始了。例如:

server.sendmail(sender_email, line, " ".join(message))

相关问题 更多 >