it-swarm-id.com

Mengirim email dari Python menggunakan SMTP

Saya menggunakan metode berikut untuk mengirim email dari Python menggunakan SMTP. Apakah ini metode yang tepat untuk digunakan atau apakah ada yang saya lewatkan?

from smtplib import SMTP
import datetime

debuglevel = 0

smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('YOUR.MAIL.SERVER', 26)
smtp.login('[email protected]', 'PASSWORD')

from_addr = "John Doe <[email protected]>"
to_addr = "[email protected]"

subj = "hello"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )

message_text = "Hello\nThis is a mail from your server\n\nBye\n"

msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s" 
        % ( from_addr, to_addr, subj, date, message_text )

smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()
106
Eli Bendersky

Skrip yang saya gunakan sangat mirip; Saya mempostingnya di sini sebagai contoh cara menggunakan modul email. * Untuk menghasilkan pesan MIME; jadi skrip ini dapat dengan mudah dimodifikasi untuk melampirkan gambar, dll.

Saya mengandalkan ISP saya untuk menambahkan header waktu tanggal.

ISP saya mengharuskan saya untuk menggunakan koneksi smtp yang aman untuk mengirim email, saya mengandalkan modul smtplib (dapat diunduh di http://www1.cs.columbia.edu/~db2501/ssmtplib.py )

Seperti pada skrip Anda, nama pengguna dan kata sandi, (diberikan nilai dummy di bawah), yang digunakan untuk mengautentikasi pada server SMTP, menggunakan teks biasa di sumbernya. Ini adalah kelemahan keamanan; tetapi alternatif terbaik tergantung pada seberapa hati-hati Anda perlu (inginkan?) untuk melindungi ini.

=======================================

#! /usr/local/bin/python


SMTPserver = 'smtp.att.yahoo.com'
sender =     '[email protected]_email_domain.net'
destination = ['[email protected]_email_domain.com']

USERNAME = "USER_NAME_FOR_INTERNET_SERVICE_PROVIDER"
PASSWORD = "PASSWORD_INTERNET_SERVICE_PROVIDER"

# typical values for text_subtype are plain, html, xml
text_subtype = 'plain'


content="""\
Test message
"""

subject="Sent from Python"

import sys
import os
import re

from smtplib import SMTP_SSL as SMTP       # this invokes the secure SMTP protocol (port 465, uses SSL)
# from smtplib import SMTP                  # use this for standard SMTP protocol   (port 25, no encryption)

# old version
# from email.MIMEText import MIMEText
from email.mime.text import MIMEText

try:
    msg = MIMEText(content, text_subtype)
    msg['Subject']=       subject
    msg['From']   = sender # some SMTP servers will do this automatically, not all

    conn = SMTP(SMTPserver)
    conn.set_debuglevel(False)
    conn.login(USERNAME, PASSWORD)
    try:
        conn.sendmail(sender, destination, msg.as_string())
    finally:
        conn.quit()

except:
    sys.exit( "mail failed; %s" % "CUSTOM_ERROR" ) # give an error message
106

Metode yang biasa saya gunakan ... tidak jauh berbeda tetapi sedikit

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

msg = MIMEMultipart()
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
msg['Subject'] = 'simple email in python'
message = 'here is the email'
msg.attach(MIMEText(message))

mailserver = smtplib.SMTP('smtp.gmail.com',587)
# identify ourselves to smtp gmail client
mailserver.ehlo()
# secure our email with tls encryption
mailserver.starttls()
# re-identify ourselves as an encrypted connection
mailserver.ehlo()
mailserver.login('[email protected]', 'mypassword')

mailserver.sendmail('[email protected]','[email protected]',msg.as_string())

mailserver.quit()

Itu dia

81
madman2890

Juga jika Anda ingin melakukan smtp auth dengan TLS sebagai lawan SSL maka Anda hanya perlu mengubah port (menggunakan 587) dan melakukan smtp.starttls (). Ini bekerja untuk saya:

...
smtp.connect('YOUR.MAIL.SERVER', 587)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login('[email protected]', 'PASSWORD')
...
21
mandric

Gotcha utama yang saya lihat adalah bahwa Anda tidak menangani kesalahan apa pun: .login () dan .sendmail () keduanya telah mendokumentasikan pengecualian yang dapat mereka buang, dan sepertinya .connect () harus memiliki beberapa cara untuk menunjukkan bahwa itu adalah tidak dapat terhubung - mungkin pengecualian yang dilemparkan oleh kode soket yang mendasarinya.

6
pjz

kode berikut berfungsi dengan baik untuk saya:

import smtplib

to = '[email protected]'
gmail_user = '[email protected]'
gmail_pwd = 'yourpassword'
smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo() # extra characters to permit edit
smtpserver.login(gmail_user, gmail_pwd)
header = 'To:' + to + '\n' + 'From: ' + gmail_user + '\n' + 'Subject:testing \n'
print header
msg = header + '\n this is test msg from mkyong.com \n\n'
smtpserver.sendmail(gmail_user, to, msg)
print 'done!'
smtpserver.quit()

Ref: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/

5
Abdul Majeed

Bagaimana dengan ini?

import smtplib

SERVER = "localhost"

FROM = "[email protected]"
TO = ["[email protected]"] # must be a list

SUBJECT = "Hello!"

TEXT = "This message was sent with Python's smtplib."

# Prepare actual message

message = """\
From: %s
To: %s
Subject: %s

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)

# Send the mail

server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
5
Satish

Pastikan Anda tidak memiliki firewall yang memblokir SMTP. Pertama kali saya mencoba mengirim email, email itu diblokir oleh Windows Firewall dan McAfee - butuh selamanya untuk menemukan keduanya.

5
Mark Ransom

Anda harus memastikan Anda memformat tanggal dalam format yang benar - RFC2822 .

3
Douglas Leeder

Contoh kode yang saya lakukan untuk mengirim email menggunakan SMTP.

import smtplib, ssl

smtp_server = "smtp.gmail.com"
port = 587  # For starttls
sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "<your password here>"
message = """ Subject: Hi there

This message is sent from Python."""


# Create a secure SSL context
context = ssl.create_default_context()

# Try to log in to server and send email
server = smtplib.SMTP(smtp_server,port)

try:
    server.ehlo() # Can be omitted
    server.starttls(context=context) # Secure the connection
    server.ehlo() # Can be omitted
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, message)
except Exception as e:
    # Print any error messages to stdout
    print(e)
finally:
    server.quit()
2
Hariharan AR

Lihat semua jawaban panjang itu? Tolong izinkan saya untuk mempromosikan diri dengan melakukan semuanya dalam beberapa baris.

Impor dan Hubungkan:

import yagmail
yag = yagmail.SMTP('[email protected]', Host = 'YOUR.MAIL.SERVER', port = 26)

Maka itu hanya satu kalimat:

yag.send('[email protected]', 'hello', 'Hello\nThis is a mail from your server\n\nBye\n')

Ini benar-benar akan menutup ketika keluar dari ruang lingkup (atau dapat ditutup secara manual). Selain itu, ini akan memungkinkan Anda untuk mendaftarkan nama pengguna Anda di keyring Anda sehingga Anda tidak perlu menuliskan kata sandi Anda dalam skrip Anda (itu benar-benar mengganggu saya sebelum menulis yagmail!)

Untuk paket/instalasi, tips dan trik silakan lihat git atau pip , tersedia untuk keduanya Python 2 dan 3.

2
PascalVKooten

Inilah contoh yang berfungsi untuk Python 3.x

#!/usr/bin/env python3

from email.message import EmailMessage
from getpass import getpass
from smtplib import SMTP_SSL
from sys import exit

smtp_server = 'smtp.gmail.com'
username = '[email protected]'
password = getpass('Enter Gmail password: ')

sender = '[email protected]'
destination = '[email protected]'
subject = 'Sent from Python 3.x'
content = 'Hello! This was sent to you via Python 3.x!'

# Create a text/plain message
msg = EmailMessage()
msg.set_content(content)

msg['Subject'] = subject
msg['From'] = sender
msg['To'] = destination

try:
    s = SMTP_SSL(smtp_server)
    s.login(username, password)
    try:
        s.send_message(msg)
    finally:
        s.quit()

except Exception as E:
    exit('Mail failed: {}'.format(str(E)))
0
Mark

kamu bisa melakukan itu

import smtplib
from email.mime.text import MIMEText
from email.header import Header


server = smtplib.SMTP('mail.servername.com', 25)
server.ehlo()
server.starttls()

server.login('username', 'password')
from = '[email protected]'
to = '[email protected]'
body = 'That A Message For My Girl Friend For tell Him If We will go to eat Something This Nigth'
subject = 'Invite to A Diner'
msg = MIMEText(body,'plain','utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = Header(from, 'utf-8')
msg['To'] = Header(to, 'utf-8')
message = msg.as_string()
server.sendmail(from, to, message)
0
Skiller Dz