472,127 Members | 1,909 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,127 software developers and data experts.

sending emails to a list of recipients

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
5 23457
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
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
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
"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
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.

Similar topics

1 post views Thread by Devonish | last post: by
4 posts views Thread by splicemix | last post: by
5 posts views Thread by horsetransport | last post: by
reply views Thread by Jim Devenish | last post: by
4 posts views Thread by Michelle | last post: by
7 posts views Thread by 3KWA | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.