मैं पायथन का उपयोग करके ईमेल में HTML सामग्री कैसे भेज सकता हूं? मैं साधारण पाठ भेज सकता हूं।
मैं पायथन का उपयोग करके ईमेल में HTML सामग्री कैसे भेज सकता हूं? मैं साधारण पाठ भेज सकता हूं।
जवाबों:
से 18.1.11 - अजगर v2.7.14 प्रलेखन। ईमेल: उदाहरण :
एक वैकल्पिक सादे पाठ संस्करण के साथ HTML संदेश बनाने का एक उदाहरण इस प्रकार है:
#! /usr/bin/python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# me == my email address
# you == recipient's email address
me = "my@email.com"
you = "your@email.com"
# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = "Link"
msg['From'] = me
msg['To'] = you
# Create the body of the message (a plain-text and an HTML version).
text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.python.org"
html = """\
<html>
<head></head>
<body>
<p>Hi!<br>
How are you?<br>
Here is the <a href="http://www.python.org">link</a> you wanted.
</p>
</body>
</html>
"""
# Record the MIME types of both parts - text/plain and text/html.
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(part1)
msg.attach(part2)
# Send the message via local SMTP server.
s = smtplib.SMTP('localhost')
# sendmail function takes 3 arguments: sender's address, recipient's address
# and message to send - here it is sent as one string.
s.sendmail(me, you, msg.as_string())
s.quit()
quit
s
# According to RFC 2046, the last part of a multipart message, in this case # the HTML message, is best and preferred.
मेरी इच्छा है कि मैं इसे 2 वर्ष पहले
आप मेरे मेलर मॉड्यूल का उपयोग करने की कोशिश कर सकते हैं ।
from mailer import Mailer
from mailer import Message
message = Message(From="me@example.com",
To="you@example.com")
message.Subject = "An HTML Email"
message.Html = """<p>Hi!<br>
How are you?<br>
Here is the <a href="http://www.python.org">link</a> you wanted.</p>"""
sender = Mailer('smtp.example.com')
sender.send(message)
use_tls=True
, usr='email'
और pwd='password'
जब इनिशियलाइज़ करना Mailer
और यह काम करेगा।
message.Body = """Some text to show when the client cannot show HTML emails"""
यहां स्वीकृत उत्तर का जीमेल कार्यान्वयन है:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# me == my email address
# you == recipient's email address
me = "my@email.com"
you = "your@email.com"
# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = "Link"
msg['From'] = me
msg['To'] = you
# Create the body of the message (a plain-text and an HTML version).
text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.python.org"
html = """\
<html>
<head></head>
<body>
<p>Hi!<br>
How are you?<br>
Here is the <a href="http://www.python.org">link</a> you wanted.
</p>
</body>
</html>
"""
# Record the MIME types of both parts - text/plain and text/html.
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(part1)
msg.attach(part2)
# Send the message via local SMTP server.
mail = smtplib.SMTP('smtp.gmail.com', 587)
mail.ehlo()
mail.starttls()
mail.login('userName', 'password')
mail.sendmail(me, you, msg.as_string())
mail.quit()
यहां HTML ईमेल भेजने का एक सरल तरीका है, केवल सामग्री-प्रकार के शीर्षक को 'टेक्स्ट / html' के रूप में निर्दिष्ट करके:
import email.message
import smtplib
msg = email.message.Message()
msg['Subject'] = 'foo'
msg['From'] = 'sender@test.com'
msg['To'] = 'recipient@test.com'
msg.add_header('Content-Type','text/html')
msg.set_payload('Body of <b>message</b>')
# Send the message via local SMTP server.
s = smtplib.SMTP('localhost')
s.starttls()
s.login(email_login,
email_passwd)
s.sendmail(msg['From'], [msg['To']], msg.as_string())
s.quit()
smtplib.SMTP()
उदाहरण के लिए स्वीकृत उत्तर को संदर्भित कर सकता है , जो tls का उपयोग नहीं करता है। मैंने इसे आंतरिक स्क्रिप्ट के लिए काम में उपयोग किया जहां हम ssmtp और एक स्थानीय मेलहब का उपयोग करते हैं। साथ ही, यह उदाहरण गायब है s.quit()
।
यहाँ नमूना कोड है। यह पायथन कुकबुक साइट पर पाए गए कोड से प्रेरित है (सटीक लिंक नहीं मिल सकता है)
def createhtmlmail (html, text, subject, fromEmail):
"""Create a mime-message that will render HTML in popular
MUAs, text in better ones"""
import MimeWriter
import mimetools
import cStringIO
out = cStringIO.StringIO() # output buffer for our message
htmlin = cStringIO.StringIO(html)
txtin = cStringIO.StringIO(text)
writer = MimeWriter.MimeWriter(out)
#
# set up some basic headers... we put subject here
# because smtplib.sendmail expects it to be in the
# message body
#
writer.addheader("From", fromEmail)
writer.addheader("Subject", subject)
writer.addheader("MIME-Version", "1.0")
#
# start the multipart section of the message
# multipart/alternative seems to work better
# on some MUAs than multipart/mixed
#
writer.startmultipartbody("alternative")
writer.flushheaders()
#
# the plain text section
#
subpart = writer.nextpart()
subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
pout = subpart.startbody("text/plain", [("charset", 'us-ascii')])
mimetools.encode(txtin, pout, 'quoted-printable')
txtin.close()
#
# start the html subpart of the message
#
subpart = writer.nextpart()
subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
#
# returns us a file-ish object we can write to
#
pout = subpart.startbody("text/html", [("charset", 'us-ascii')])
mimetools.encode(htmlin, pout, 'quoted-printable')
htmlin.close()
#
# Now that we're done, close our writer and
# return the message body
#
writer.lastpart()
msg = out.getvalue()
out.close()
print msg
return msg
if __name__=="__main__":
import smtplib
html = 'html version'
text = 'TEST VERSION'
subject = "BACKUP REPORT"
message = createhtmlmail(html, text, subject, 'From Host <sender@host.com>')
server = smtplib.SMTP("smtp_server_address","smtp_port")
server.login('username', 'password')
server.sendmail('sender@host.com', 'target@otherhost.com', message)
server.quit()
python3 के लिए, @taltman के उत्तर में सुधार करें :
email.message.EmailMessage
बजाय उपयोग करें email.message.Message
।email.set_content
दुर्गंध का उपयोग करें , subtype='html'
तर्क असाइन करें । निम्न स्तर के फ़ंक के बजाय set_payload
और हेडर को मैन्युअल रूप से जोड़ें।SMTP.send_message
func के बजाय func का उपयोग करें SMTP.sendmail
।with
ब्लॉक को ऑटो कनेक्शन से उपयोग करें ।from email.message import EmailMessage
from smtplib import SMTP
# construct email
email = EmailMessage()
email['Subject'] = 'foo'
email['From'] = 'sender@test.com'
email['To'] = 'recipient@test.com'
email.set_content('<font color="red">red color text</font>', subtype='html')
# Send the message via local SMTP server.
with smtplib.SMTP('localhost') as s:
s.login('foo_user', 'bar_password')
s.send_message(email)
दरअसल, यागमेल ने कुछ अलग तरीका अपनाया।
यह डिफ़ॉल्ट रूप से HTML भेज सकता है, अक्षम ईमेल-पाठकों के लिए स्वचालित वापसी के साथ। यह अब 17 वीं शताब्दी नहीं है।
बेशक, इसे ओवरराइड किया जा सकता है, लेकिन यहाँ जाता है:
import yagmail
yag = yagmail.SMTP("me@example.com", "mypassword")
html_msg = """<p>Hi!<br>
How are you?<br>
Here is the <a href="http://www.python.org">link</a> you wanted.</p>"""
yag.send("to@example.com", "the subject", html_msg)
स्थापना के निर्देश और कई और अधिक महान सुविधाओं के लिए, पर एक नजर है GitHub ।
यहाँ smtplib
CC और BCC विकल्पों के साथ-साथ Python के सादे पाठ और HTML ईमेल भेजने का एक कार्यशील उदाहरण दिया गया है ।
https://varunver.wordpress.com/2017/01/26/python-smtplib-send-plaintext-and-html-emails/
#!/usr/bin/env python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def send_mail(params, type_):
email_subject = params['email_subject']
email_from = "from_email@domain.com"
email_to = params['email_to']
email_cc = params.get('email_cc')
email_bcc = params.get('email_bcc')
email_body = params['email_body']
msg = MIMEMultipart('alternative')
msg['To'] = email_to
msg['CC'] = email_cc
msg['Subject'] = email_subject
mt_html = MIMEText(email_body, type_)
msg.attach(mt_html)
server = smtplib.SMTP('YOUR_MAIL_SERVER.DOMAIN.COM')
server.set_debuglevel(1)
toaddrs = [email_to] + [email_cc] + [email_bcc]
server.sendmail(email_from, toaddrs, msg.as_string())
server.quit()
# Calling the mailer functions
params = {
'email_to': 'to_email@domain.com',
'email_cc': 'cc_email@domain.com',
'email_bcc': 'bcc_email@domain.com',
'email_subject': 'Test message from python library',
'email_body': '<h1>Hello World</h1>'
}
for t in ['plain', 'html']:
send_mail(params, t)
यहाँ boto3 का उपयोग कर AWS के लिए मेरा जवाब है
subject = "Hello"
html = "<b>Hello Consumer</b>"
client = boto3.client('ses', region_name='us-east-1', aws_access_key_id="your_key",
aws_secret_access_key="your_secret")
client.send_email(
Source='ACME <do-not-reply@acme.com>',
Destination={'ToAddresses': [email]},
Message={
'Subject': {'Data': subject},
'Body': {
'Html': {'Data': html}
}
}
Office 365 में संगठनात्मक खाते से ईमेल भेजने का सबसे सरल समाधान:
from O365 import Message
html_template = """
<html>
<head>
<title></title>
</head>
<body>
{}
</body>
</html>
"""
final_html_data = html_template.format(df.to_html(index=False))
o365_auth = ('sender_username@company_email.com','Password')
m = Message(auth=o365_auth)
m.setRecipients('receiver_username@company_email.com')
m.setSubject('Weekly report')
m.setBodyHTML(final_html_data)
m.sendMessage()
यहाँ df html टेबल में कनवर्ट की गई डेटाफ्रेम है, जिसे html_template पर इंजेक्ट किया जा रहा है