By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,426 Members | 2,928 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,426 IT Pros & Developers. It's quick & easy.

sending emails to a list of recipients

P: n/a
Kun
i have the following code:

----------------------------------
import smtplib

from email.MIMEText import MIMEText
fp = open('confirmation.txt', 'rb')
msg = MIMEText(fp.read())

From = 'x***@xxxx.xxxx.edu'

msg['Subject'] = 'Purchase Confirmation'
msg ['From'] = From
msg['To'] = emails

s = smtplib.SMTP('xxxx.xxx.xxx.edu')
s.login('xxxxx','xxxx')
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.close()
----------------------------------

it works if msg['To'] = 'e****@email.com'

however, i'm trying to attach a list of emails named 'emails' to msg['To']

emails is in the following format: ['n***@gmail.com', 'n***@gmail.com',
'x**@xxx.xxxx.edu']
anyone have an idea how i can modify this script to work with sending a
list? note this is a snippet of a larger code, 'emails' is as a string
defined earlier.
Mar 25 '06 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Kun
Kun wrote:
i have the following code:

----------------------------------
import smtplib

from email.MIMEText import MIMEText
fp = open('confirmation.txt', 'rb')
msg = MIMEText(fp.read())

From = 'x***@xxxx.xxxx.edu'

msg['Subject'] = 'Purchase Confirmation'
msg ['From'] = From
msg['To'] = emails

s = smtplib.SMTP('xxxx.xxx.xxx.edu')
s.login('xxxxx','xxxx')
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.close()
----------------------------------

it works if msg['To'] = 'e****@email.com'

however, i'm trying to attach a list of emails named 'emails' to msg['To']

emails is in the following format: ['n***@gmail.com', 'n***@gmail.com',
'x**@xxx.xxxx.edu']
anyone have an idea how i can modify this script to work with sending a
list? note this is a snippet of a larger code, 'emails' is as a string
defined earlier.


this is my error msg of leaving the code in its current state... (brave
yourself)

Traceback (most recent call last):
File "/Tutorial/IMAP/scannermailer.py", line 41, in -toplevel-
s.sendmail(msg['From'], msg['To'], msg.as_string())
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Message.py",
line 129, in as_string
g.flatten(self, unixfrom=unixfrom)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Generator.py",
line 82, in flatten
self._write(msg)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Generator.py",
line 120, in _write
self._write_headers(msg)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Generator.py",
line 166, in _write_headers
header_name=h, continuation_ws='\t').encode()
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Header.py",
line 395, in encode
return self._encode_chunks(newchunks, maxlinelen)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Header.py",
line 355, in _encode_chunks
_max_append(chunks, s, maxlinelen, extra)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/quopriMIME.py",
line 79, in _max_append
L.append(s.lstrip())
AttributeError: 'list' object has no attribute 'lstrip'
Mar 25 '06 #2

P: n/a
Kun wrote:
i have the following code:

----------------------------------
import smtplib

from email.MIMEText import MIMEText
fp = open('confirmation.txt', 'rb')
msg = MIMEText(fp.read())

From = 'x***@xxxx.xxxx.edu'

msg['Subject'] = 'Purchase Confirmation'
msg ['From'] = From
msg['To'] = emails

s = smtplib.SMTP('xxxx.xxx.xxx.edu')
s.login('xxxxx','xxxx')
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.close()
----------------------------------

it works if msg['To'] = 'e****@email.com'

however, i'm trying to attach a list of emails named 'emails' to msg['To']

emails is in the following format: ['n***@gmail.com', 'n***@gmail.com',
'x**@xxx.xxxx.edu']
anyone have an idea how i can modify this script to work with sending a
list? note this is a snippet of a larger code, 'emails' is as a string
defined earlier.

maybe try : msg['To'] = ', '.join( emails )

taken from:

http://docs.python.org/lib/node597.html

Gerard

Mar 26 '06 #3

P: n/a
smtplib docs http://python.active-venture.com/lib/SMTP-example.html
say that the to should be a list of addresses (your emails);

s.sendmail(msg['From'], emails, msg.as_string())

-Larry Bates
Kun wrote:
Kun wrote:
i have the following code:

----------------------------------
import smtplib

from email.MIMEText import MIMEText
fp = open('confirmation.txt', 'rb')
msg = MIMEText(fp.read())

From = 'x***@xxxx.xxxx.edu'

msg['Subject'] = 'Purchase Confirmation'
msg ['From'] = From
msg['To'] = emails

s = smtplib.SMTP('xxxx.xxx.xxx.edu')
s.login('xxxxx','xxxx')
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.close()
----------------------------------

it works if msg['To'] = 'e****@email.com'

however, i'm trying to attach a list of emails named 'emails' to
msg['To']

emails is in the following format: ['n***@gmail.com',
'n***@gmail.com', 'x**@xxx.xxxx.edu']
anyone have an idea how i can modify this script to work with sending
a list? note this is a snippet of a larger code, 'emails' is as a
string defined earlier.


this is my error msg of leaving the code in its current state... (brave
yourself)

Traceback (most recent call last):
File "/Tutorial/IMAP/scannermailer.py", line 41, in -toplevel-
s.sendmail(msg['From'], msg['To'], msg.as_string())
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Message.py",
line 129, in as_string
g.flatten(self, unixfrom=unixfrom)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Generator.py",
line 82, in flatten
self._write(msg)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Generator.py",
line 120, in _write
self._write_headers(msg)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Generator.py",
line 166, in _write_headers
header_name=h, continuation_ws='\t').encode()
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Header.py",
line 395, in encode
return self._encode_chunks(newchunks, maxlinelen)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Header.py",
line 355, in _encode_chunks
_max_append(chunks, s, maxlinelen, extra)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/quopriMIME.py",
line 79, in _max_append
L.append(s.lstrip())
AttributeError: 'list' object has no attribute 'lstrip'

Mar 26 '06 #4

P: n/a
"Gerard Flanagan" <gr********@yahoo.co.uk> wrote:
Kun wrote:
i have the following code:

----------------------------------
import smtplib
...
msg['Subject'] = 'Purchase Confirmation'
msg ['From'] = From
msg['To'] = emails

s = smtplib.SMTP('xxxx.xxx.xxx.edu')
s.login('xxxxx','xxxx')
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.close()
----------------------------------

it works if msg['To'] = 'e****@email.com'

however, i'm trying to attach a list of emails named 'emails' to msg['To']

emails is in the following format: ['n***@gmail.com', 'n***@gmail.com',
'x**@xxx.xxxx.edu']

anyone have an idea how i can modify this script to work with sending a
list? note this is a snippet of a larger code, 'emails' is as a string
defined earlier.

What did you try? You should just be able to pass the list:

s.sendmail( msg['From'], emails, msg.as_string() )
Or, if you must,
msg['To'] = emails
s.sendmail( msg['From'], msg['To'], msg.as_string() )

It needs to be a list or tuple of individual addresses, e-mail only, with
no "nicknames". If you tried that, what did you see?
maybe try : msg['To'] = ', '.join( emails )

taken from:

http://docs.python.org/lib/node597.html


No, you misread the example. It uses that in the headers of the message.
That won't work for the second parameter of SMTP.sendmail.
--
- Tim Roberts, ti**@probo.com
Providenza & Boekelheide, Inc.
Mar 27 '06 #5

P: n/a
Kun <ne*******@gmail.com> wrote:

Kun wrote:
i have the following code:

----------------------------------
import smtplib

from email.MIMEText import MIMEText
fp = open('confirmation.txt', 'rb')
msg = MIMEText(fp.read())

From = 'x***@xxxx.xxxx.edu'

msg['Subject'] = 'Purchase Confirmation'
msg ['From'] = From
msg['To'] = emails

s = smtplib.SMTP('xxxx.xxx.xxx.edu')
s.login('xxxxx','xxxx')
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.close()
----------------------------------


this is my error msg of leaving the code in its current state... (brave
yourself)

Traceback (most recent call last):
File "/Tutorial/IMAP/scannermailer.py", line 41, in -toplevel-
s.sendmail(msg['From'], msg['To'], msg.as_string())
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/Message.py",
line 129, in as_string
g.flatten(self, unixfrom=unixfrom)
...
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/email/quopriMIME.py",
line 79, in _max_append
L.append(s.lstrip())
AttributeError: 'list' object has no attribute 'lstrip'


OK, I see what's going on now. The problem is that SMTP.sendmail and
email.MIMEText need two different things.

email.MIMEText sets up the "To:" header for the body of the e-mail. It is
ONLY used for displaying a result to the human being at the other end, and
like all e-mail headers, must be a single string. (Note that it does not
actually have to have anything to do with the people who actually receive
the message.)

SMTP.sendmail, on the other hand, sets up the "envelope" of the message for
the SMTP protocol. It needs a Python list of strings, each of which has a
single address.

So, what you need to do is COMBINE the two replies you received. Set
msg['To'] to a single string, but pass the raw list to sendmail:

msg['To'] = ', '.join( emails )
....
s.sendmail( msg['From'], emails, msg.as_string() )
--
- Tim Roberts, ti**@probo.com
Providenza & Boekelheide, Inc.
Mar 27 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.