Python - Sending Email using SMTP
Simple Mail Transfer Protocol (SMTP) is a protocol which handles sending e-mail and routing e-mail between mail servers.
Python provides smtplib module which defines an SMTP client session object that can be used to send mail to any Internet machine with an SMTP or ESMTP listener daemon.
Here is a simple syntax to create one SMTP object which can later be used to send an email:
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Here is the detail of the parameters:
-
host: This is the host running your SMTP server. You can specifiy IP address of the host or a domain name like tutorialspoint.com. This is optional argument.
-
port: If you are providing host argument then you need to specifiy a port where SMTP server is listening. Usually this port would be 25.
-
local_hostname: If your SMTP server is running on your local machine then you can specify just localhost as of this option.
An SMTP object has an instance method called sendmail, which will typically be used to do the work of mailing a message. It takes three parameters:
-
The sender - A string with the address of the sender.
-
The receivers - A list of strings, one for each recipient.
-
The message - A message as a string formatted as specified in the various RFCs.
Example:
Here is a simple way to send one email using Python script. Try it once:
#!/usr/bin/python
import smtplib
sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']
message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"
Here you have placed a basic e-mail in message, using a triple quote, taking care to format the headers correctly. An e-mails requires a From, To, and Subject header, separated from the body of the e-mail with a blank line.
To send the mail you use smtpObj to connect to the SMTP server on the local machine and then use the sendmail method along with the message, the from address, and the destination address as parameters (even though the from and to addresses are within the e-mail itself, these aren't always used to route mail).
If you're not running an SMTP server on your local machine, you can use smtplib client to communicate with a remote SMTP server. Unless you're using a webmail service (such as Hotmail or Yahoo! Mail), your e-mail provider will have provided you with outgoing mail server details that you can supply them, as follows:
smtplib.SMTP('mail.your-domain.com', 25)
Sending an HTML email using Python:
When you send a text message using Python then all the content will be treated as simple text. Even if you will include HTML tags in a text message, it will be displayed as simple text and HTML tags will not be formatted according to HTML syntax. But Python provides option to send an HTML message as actual HTML message.
While sending an email message you can specify a Mime version, content type and character set to send an HTML email.
Example:
Following is the example to send HTML content as an email. Try it once:
#!/usr/bin/python
import smtplib
message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test
This is an e-mail message to be sent in HTML format
<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"
Sending Attachements as an e-mail:
To send an email with mixed content requires to set Content-type header to multipart/mixed. Then text and attachment sections can be specified within boundaries.
A boundary is started with two hyphens followed by a unique number which can not appear in the message part of the email. A final boundary denoting the email's final section must also end with two hyphens.
Attached files should be encoded with the pack("m") function to have base64 encoding before transmission.
Example:
Following is the example which will send a file /tmp/test.txt as an attachment. Try it once:
#!/usr/bin/python
import smtplib
import base64
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) # base64
sender = 'webmaster@tutorialpoint.com'
reciever = 'amrood.admin@gmail.com'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <me@fromdomain.net>
To: To Person <amrood.admin@gmail.com>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body,marker)
# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s
%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, reciever, message)
print "Successfully sent email"
except Exception:
print "Error: unable to send email"
分享到:
相关推荐
sending emails from a script or creating a guest book for your web application. We learn to write email clients with SMTP and POP3. Chapter 6, Programming Across Machine Boundaries, gives you a taste ...
Python Cookbook英文版 ... 10.9 Sending Multipart MIME Email 10.10 Bundling Files in a MIME Message 10.11 Unpacking a Multipart MIME Message 10.12 Module: PyHeartBeat-Detecting Inactive Computers ...
Programming Python, 2nd Edition 目录如下,需要下载的朋友不要错过哦~ Programming Python, 2nd Edition By Mark Lutz Publisher : O'Reilly Pub Date : March 2001 ISBN : 0-596-00085-5 Pages : 1256 ...
Sending Email and Text Messages Chapter 17. Manipulating Images Chapter 18. Controlling the Keyboard and Mouse with GUI Automation Appendix A. Installing Third-Party Modules Appendix B. Running ...
Sending Binary Data to Standard Output Under Windows Recipe 2.13. Using a C++-like iostream Syntax Recipe 2.14. Rewinding an Input File to the Beginning Recipe 2.15. Adapting a File-like Object...
mailgun# Credentials for MailgunMAILGUN_API_KEY = 'YOUR API KEY'MAILGUN_DOMAIN = 'MAILGUN_DOMAIN'# The engine is in charge of sending email using a backend system.engine = templatemail . engines . ...
1-Bulk email sending 2-Basic Python Agent Creator 3-Office Excel Macro Creator 4-DDE Excel Creator(or Custom Payload) 5-Return İnformation * [Mail Open Track] * [Agent Open Track] 6-AutoSave 7-...
简单的: :tangerine: Based on python3, and lightweight :watermelon: Allow to add multiple sending servers, if one server is broken, it will automatically switch to other servers :doughnut: Email ...
Inviting friends via email 201 The invitation data model 202 The Invite A Friend form and view 205 Handling activation links 207 Improving the interface with messages 211 Summary 214 Chapter 11:...
from alertlib import send_to_email ## mandrill_login = [mandrill_login, mandrill_password] send_to_email ( mandrill_login , email_from = 'alertlib@skypicker.com' , email_to = [ 'some.mail@host.com' ]...
Sending Email .................................................8 Hello World—Danger! .............................................8 Summary ...........................................................