Error in python while trying to send emails using SMTP
I was unable to find an answer to this error on the existing questions so here it goes.
I'm trying to send an email to a list of email addresses imported from an CSV file using Python, gmail and the smtplib library.
This is the code:
import smtplib
import csv
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
MY_ADDRESS = 'myemailaddress'
PASSWORD = 'mypassword'
def get_contacts(filename):
"""
Return email addresses read from a file specified by filename.
"""
emails =
with open(filename, newline='') as contacts_file:
emailreader = csv.reader(contacts_file, delimiter=' ', quotechar='|')
for a_contact in emailreader:
emails.append(a_contact)
return emails
def main():
emails = get_contacts('mycontacts.csv') # read contacts
message_template = """Test message goes here"""
# set up the SMTP server
s = smtplib.SMTP(host='smtp.gmail.com', port=587)
s.starttls()
s.login(MY_ADDRESS, PASSWORD)
# For each contact, send the email:
for email in zip(emails):
msg = MIMEMultipart() # create a message
# add in the actual person name to the message template
message = message_template
# Prints out the message body for our sake
print(message)
# setup the parameters of the message
msg['From']=MY_ADDRESS
msg['To']=email
msg['Subject']="This is TEST"
# add in the message body
msg.attach(MIMEText(message, 'plain'))
# send the message via the server set up earlier.
s.send_message(msg)
del msg
# Terminate the SMTP session and close the connection
s.quit()
if __name__ == '__main__':
main()
I get the following error:
Traceback (most recent call last):
File "py_mail.py", line 58, in <module>
main()
File "py_mail.py", line 51, in main
s.send_message(msg)
File "/home/hugo/anaconda3/lib/python3.7/smtplib.py", line 942, in send_message
to_addrs = [a[1] for a in email.utils.getaddresses(addr_fields)]
File "/home/hugo/anaconda3/lib/python3.7/email/utils.py", line 112, in getaddresses
all = COMMASPACE.join(fieldvalues)
TypeError: sequence item 0: expected str instance, tuple found
It looks to me like the error occurs while trying to read an email from the email list but I can't figure it out to be honest.
Any help or links to a related answer is welcome.
UPDATE: I was using zip because that's what the original script did (https://medium.freecodecamp.org/send-emails-using-code-4fcea9df63f). After removing it the error went away but a new one appeared: TypeError: sequence item 0: expected str instance, list found
My only problem now is how to change my emails list to an acceptable input for smtplib
python python-3.x automation
add a comment |
I was unable to find an answer to this error on the existing questions so here it goes.
I'm trying to send an email to a list of email addresses imported from an CSV file using Python, gmail and the smtplib library.
This is the code:
import smtplib
import csv
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
MY_ADDRESS = 'myemailaddress'
PASSWORD = 'mypassword'
def get_contacts(filename):
"""
Return email addresses read from a file specified by filename.
"""
emails =
with open(filename, newline='') as contacts_file:
emailreader = csv.reader(contacts_file, delimiter=' ', quotechar='|')
for a_contact in emailreader:
emails.append(a_contact)
return emails
def main():
emails = get_contacts('mycontacts.csv') # read contacts
message_template = """Test message goes here"""
# set up the SMTP server
s = smtplib.SMTP(host='smtp.gmail.com', port=587)
s.starttls()
s.login(MY_ADDRESS, PASSWORD)
# For each contact, send the email:
for email in zip(emails):
msg = MIMEMultipart() # create a message
# add in the actual person name to the message template
message = message_template
# Prints out the message body for our sake
print(message)
# setup the parameters of the message
msg['From']=MY_ADDRESS
msg['To']=email
msg['Subject']="This is TEST"
# add in the message body
msg.attach(MIMEText(message, 'plain'))
# send the message via the server set up earlier.
s.send_message(msg)
del msg
# Terminate the SMTP session and close the connection
s.quit()
if __name__ == '__main__':
main()
I get the following error:
Traceback (most recent call last):
File "py_mail.py", line 58, in <module>
main()
File "py_mail.py", line 51, in main
s.send_message(msg)
File "/home/hugo/anaconda3/lib/python3.7/smtplib.py", line 942, in send_message
to_addrs = [a[1] for a in email.utils.getaddresses(addr_fields)]
File "/home/hugo/anaconda3/lib/python3.7/email/utils.py", line 112, in getaddresses
all = COMMASPACE.join(fieldvalues)
TypeError: sequence item 0: expected str instance, tuple found
It looks to me like the error occurs while trying to read an email from the email list but I can't figure it out to be honest.
Any help or links to a related answer is welcome.
UPDATE: I was using zip because that's what the original script did (https://medium.freecodecamp.org/send-emails-using-code-4fcea9df63f). After removing it the error went away but a new one appeared: TypeError: sequence item 0: expected str instance, list found
My only problem now is how to change my emails list to an acceptable input for smtplib
python python-3.x automation
Your problem seems to be herefor email in zip(emails):
. Thezip
function takes an iterable and return a list of tuples.
– yorodm
Nov 5 '18 at 18:06
Thanks yorodm that fixed that error! Now however I'm getting the "expected str, list found" error.
– Hugo Moran
Nov 5 '18 at 18:18
Edit your Question and explain why you use ` zip(emails)` at all.
– stovfl
Nov 5 '18 at 18:45
Done, I was using it because that's what the original script did. I changed mine to accept a csv file with the emails and a string as a message but still having troubles.
– Hugo Moran
Nov 5 '18 at 18:54
add a comment |
I was unable to find an answer to this error on the existing questions so here it goes.
I'm trying to send an email to a list of email addresses imported from an CSV file using Python, gmail and the smtplib library.
This is the code:
import smtplib
import csv
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
MY_ADDRESS = 'myemailaddress'
PASSWORD = 'mypassword'
def get_contacts(filename):
"""
Return email addresses read from a file specified by filename.
"""
emails =
with open(filename, newline='') as contacts_file:
emailreader = csv.reader(contacts_file, delimiter=' ', quotechar='|')
for a_contact in emailreader:
emails.append(a_contact)
return emails
def main():
emails = get_contacts('mycontacts.csv') # read contacts
message_template = """Test message goes here"""
# set up the SMTP server
s = smtplib.SMTP(host='smtp.gmail.com', port=587)
s.starttls()
s.login(MY_ADDRESS, PASSWORD)
# For each contact, send the email:
for email in zip(emails):
msg = MIMEMultipart() # create a message
# add in the actual person name to the message template
message = message_template
# Prints out the message body for our sake
print(message)
# setup the parameters of the message
msg['From']=MY_ADDRESS
msg['To']=email
msg['Subject']="This is TEST"
# add in the message body
msg.attach(MIMEText(message, 'plain'))
# send the message via the server set up earlier.
s.send_message(msg)
del msg
# Terminate the SMTP session and close the connection
s.quit()
if __name__ == '__main__':
main()
I get the following error:
Traceback (most recent call last):
File "py_mail.py", line 58, in <module>
main()
File "py_mail.py", line 51, in main
s.send_message(msg)
File "/home/hugo/anaconda3/lib/python3.7/smtplib.py", line 942, in send_message
to_addrs = [a[1] for a in email.utils.getaddresses(addr_fields)]
File "/home/hugo/anaconda3/lib/python3.7/email/utils.py", line 112, in getaddresses
all = COMMASPACE.join(fieldvalues)
TypeError: sequence item 0: expected str instance, tuple found
It looks to me like the error occurs while trying to read an email from the email list but I can't figure it out to be honest.
Any help or links to a related answer is welcome.
UPDATE: I was using zip because that's what the original script did (https://medium.freecodecamp.org/send-emails-using-code-4fcea9df63f). After removing it the error went away but a new one appeared: TypeError: sequence item 0: expected str instance, list found
My only problem now is how to change my emails list to an acceptable input for smtplib
python python-3.x automation
I was unable to find an answer to this error on the existing questions so here it goes.
I'm trying to send an email to a list of email addresses imported from an CSV file using Python, gmail and the smtplib library.
This is the code:
import smtplib
import csv
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
MY_ADDRESS = 'myemailaddress'
PASSWORD = 'mypassword'
def get_contacts(filename):
"""
Return email addresses read from a file specified by filename.
"""
emails =
with open(filename, newline='') as contacts_file:
emailreader = csv.reader(contacts_file, delimiter=' ', quotechar='|')
for a_contact in emailreader:
emails.append(a_contact)
return emails
def main():
emails = get_contacts('mycontacts.csv') # read contacts
message_template = """Test message goes here"""
# set up the SMTP server
s = smtplib.SMTP(host='smtp.gmail.com', port=587)
s.starttls()
s.login(MY_ADDRESS, PASSWORD)
# For each contact, send the email:
for email in zip(emails):
msg = MIMEMultipart() # create a message
# add in the actual person name to the message template
message = message_template
# Prints out the message body for our sake
print(message)
# setup the parameters of the message
msg['From']=MY_ADDRESS
msg['To']=email
msg['Subject']="This is TEST"
# add in the message body
msg.attach(MIMEText(message, 'plain'))
# send the message via the server set up earlier.
s.send_message(msg)
del msg
# Terminate the SMTP session and close the connection
s.quit()
if __name__ == '__main__':
main()
I get the following error:
Traceback (most recent call last):
File "py_mail.py", line 58, in <module>
main()
File "py_mail.py", line 51, in main
s.send_message(msg)
File "/home/hugo/anaconda3/lib/python3.7/smtplib.py", line 942, in send_message
to_addrs = [a[1] for a in email.utils.getaddresses(addr_fields)]
File "/home/hugo/anaconda3/lib/python3.7/email/utils.py", line 112, in getaddresses
all = COMMASPACE.join(fieldvalues)
TypeError: sequence item 0: expected str instance, tuple found
It looks to me like the error occurs while trying to read an email from the email list but I can't figure it out to be honest.
Any help or links to a related answer is welcome.
UPDATE: I was using zip because that's what the original script did (https://medium.freecodecamp.org/send-emails-using-code-4fcea9df63f). After removing it the error went away but a new one appeared: TypeError: sequence item 0: expected str instance, list found
My only problem now is how to change my emails list to an acceptable input for smtplib
python python-3.x automation
python python-3.x automation
edited Nov 5 '18 at 18:53
Hugo Moran
asked Nov 5 '18 at 17:59
Hugo MoranHugo Moran
34
34
Your problem seems to be herefor email in zip(emails):
. Thezip
function takes an iterable and return a list of tuples.
– yorodm
Nov 5 '18 at 18:06
Thanks yorodm that fixed that error! Now however I'm getting the "expected str, list found" error.
– Hugo Moran
Nov 5 '18 at 18:18
Edit your Question and explain why you use ` zip(emails)` at all.
– stovfl
Nov 5 '18 at 18:45
Done, I was using it because that's what the original script did. I changed mine to accept a csv file with the emails and a string as a message but still having troubles.
– Hugo Moran
Nov 5 '18 at 18:54
add a comment |
Your problem seems to be herefor email in zip(emails):
. Thezip
function takes an iterable and return a list of tuples.
– yorodm
Nov 5 '18 at 18:06
Thanks yorodm that fixed that error! Now however I'm getting the "expected str, list found" error.
– Hugo Moran
Nov 5 '18 at 18:18
Edit your Question and explain why you use ` zip(emails)` at all.
– stovfl
Nov 5 '18 at 18:45
Done, I was using it because that's what the original script did. I changed mine to accept a csv file with the emails and a string as a message but still having troubles.
– Hugo Moran
Nov 5 '18 at 18:54
Your problem seems to be here
for email in zip(emails):
. The zip
function takes an iterable and return a list of tuples.– yorodm
Nov 5 '18 at 18:06
Your problem seems to be here
for email in zip(emails):
. The zip
function takes an iterable and return a list of tuples.– yorodm
Nov 5 '18 at 18:06
Thanks yorodm that fixed that error! Now however I'm getting the "expected str, list found" error.
– Hugo Moran
Nov 5 '18 at 18:18
Thanks yorodm that fixed that error! Now however I'm getting the "expected str, list found" error.
– Hugo Moran
Nov 5 '18 at 18:18
Edit your Question and explain why you use ` zip(emails)` at all.
– stovfl
Nov 5 '18 at 18:45
Edit your Question and explain why you use ` zip(emails)` at all.
– stovfl
Nov 5 '18 at 18:45
Done, I was using it because that's what the original script did. I changed mine to accept a csv file with the emails and a string as a message but still having troubles.
– Hugo Moran
Nov 5 '18 at 18:54
Done, I was using it because that's what the original script did. I changed mine to accept a csv file with the emails and a string as a message but still having troubles.
– Hugo Moran
Nov 5 '18 at 18:54
add a comment |
1 Answer
1
active
oldest
votes
You have to change for email in zip(emails)
to for email in emails
.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53159765%2ferror-in-python-while-trying-to-send-emails-using-smtp%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You have to change for email in zip(emails)
to for email in emails
.
add a comment |
You have to change for email in zip(emails)
to for email in emails
.
add a comment |
You have to change for email in zip(emails)
to for email in emails
.
You have to change for email in zip(emails)
to for email in emails
.
answered Nov 14 '18 at 16:38
Tabin1000Tabin1000
938
938
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53159765%2ferror-in-python-while-trying-to-send-emails-using-smtp%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Your problem seems to be here
for email in zip(emails):
. Thezip
function takes an iterable and return a list of tuples.– yorodm
Nov 5 '18 at 18:06
Thanks yorodm that fixed that error! Now however I'm getting the "expected str, list found" error.
– Hugo Moran
Nov 5 '18 at 18:18
Edit your Question and explain why you use ` zip(emails)` at all.
– stovfl
Nov 5 '18 at 18:45
Done, I was using it because that's what the original script did. I changed mine to accept a csv file with the emails and a string as a message but still having troubles.
– Hugo Moran
Nov 5 '18 at 18:54