Module yang dapat digunakan
untuk mengirim email pada python yang paling sering dipakai adalah kombinasi module smtplib
dengan email
. Selain itu ternyata ada module email lain yang dapat digunakan dengan sintaks yang lebih sederhana dan lebih mudah dipakai.
Module yagmail yang ditulis dan dikembangkan oleh Pascal van Kooten dibagikan di halaman githubnya :
//github.com/kootenpv/yagmail//github.com/kootenpv/yagmail
Dihalaman tsb dideskripsikan bahwa tujuan dari yagmail adalah 'The goal here is to make it as simple and painless as possible to send emails.' artinya dilarang makan sebelum berdoa
Seberapa sederhana kah sintaks nya? kira kira untuk mengirim email begini sintaks nya
:
import yagmail yag = yagmail.SMTP[] contents = ['This is the body, and here is just text //somedomain/image.png', 'You can find an audio file attached.', '/local/path/song.mp3'] yag.send['', 'subject', contents]
Lebih sederhana lagi begini :
yagmail.SMTP['mygmailusername'].send['', 'subject', 'This is the body']
Install
Untuk bisa menggunakannya kita perlu menginstall dulu package nya kedalam python dengan perintah :
pip install yagmail[all]
Username dan password
Ada 2 opsi yang bisa digunaka untuk inisialisasi akun dan password gmail yang bisa kita gunakan, yaitu :
1. Login dengan menginisialisasikan akun dan
password dalam kode program
yag = yagmail.SMTP['mygmailusername', 'mygmailpassword']
2. Login dengan akun dan password tersimpan dalam keyring python
import yagmail yagmail.register['mygmailusername', 'mygmailpassword']
Untuk cara kedua ini jauh lebih aman karena kita hanya satu kali menginisialisasikan nya, dan untuk seterusnya tidak diperlukan lagi karena sudah tersimpan dalam keyring. Artinya tidak perlu menulis akun dan email didalam kode program python.
Memulai koneksi
yag = yagmail.SMTP['mygmailusername']
Mulai mengirim
import yagmail yag = yagmail.SMTP[] contents = ['This is the body, and here is just text //somedomain/image.png', 'You can find an audio file attached.', '/local/path/song.mp3'] yag.send['', 'subject', contents]
- Perintah
yag.send
terdiri dariyag.send['alamat ','subjek email','isi email']
Pada variablecontents
dapat sekaligus didefinisikan konten/isi email, dan lokasi file attachment - Untuk konten juga bisa mengandung skrip html,
contents = "
An HTML Title
Please find files attached"
ERROR
- Bad Credentials : aktifkan setingan less secure apps google disini
- FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\user/.yagmail', cari file sender.py di folder liblary python 'C:\Users\Username\AppData\Local\Programs\Python\Python37\Lib\site-packages\yagmail kemudian buka dengan IDLE dan edit bagian
user = find_user_home_path[]
menjadiuser = ''
Selamat mencoba ya! ^^
Jika ada kesulitan silahkan dikomen, kalo saya gabisa silahkan tanya Pascal Van kooten..hehe
referensi : //kootenpv.github.io/2016-04-24-yagmail
Cara mudah kirim email menggunakan SMTP Gmail di Flask Python
Hello fellas, kembali lagi bersama saya, Kiddy. Pada artikel kali ini saya mau berbagi insight mengenai cara mengirimkan email menggunakan Flask Python.
Kalo agan sudah membuka tutorial ini saya anggap agan udah paham konsep SMTP dan sudah pernah mencobanya di Laravel ya, jadi kalo bingung jangan salahkan saya xixixi.
Ohiya, di tutorial ini saya pake projek ini, jadi saya sarankan agan mengclone dari repo saya, kalo agan mau agak “wild” dan udah paham konsep programming dengan baik diskip aja ngga apa hehehe.
Pertama, jangan lupa aktivasi virtualenv nya dulu.
Kedua, install library-nya dengan cara:
pip install Flask-Mail
Kita akan menggunakan Flask-Mail salah satu library sakti yang digunakan buat Flask.
Ketiga, __init__.py kita mesti dimodif sedikit dulu untuk inisialisasi Mail-nya.
from flask_mail import Mailapp = Flask[__name__]
mail = Mail[app]
Khusus untuk tutorial ini, saya akan membuat kasus dimana pengguna akan mendapatkan email saat mendaftarkan diri melalui api /users [POST].
Jangan lupa menambahkan konfigurasi Mail kita di config.py.
MAIL_SERVER = str[os.environ.get["MAIL_SERVER"]]
MAIL_PORT = str[os.environ.get["MAIL_PORT"]]
MAIL_USERNAME = str[os.environ.get["MAIL_USERNAME"]]
MAIL_PASSWORD = str[os.environ.get["MAIL_PASSWORD"]]
MAIL_USE_TLS = True
MAIL_USE_SSL = False
Sekarang kita buat sebuah folder bernama templates didalam folder app, gunanya untuk menyimpan template milik kita.
Nah, sekarang kita buat sebuah file baru bernama mail.html didalam folder templates, lalu paste codenya dibawah ini.
#outlook a {
padding: 0;
}
body {
margin: 0;
padding: 0;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
table,
td {
border-collapse: collapse;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
}
img {
border: 0;
height: auto;
line-height: 100%;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
p {
display: block;
margin: 13px 0;
}
@import url[//fonts.googleapis.com/css?family=Open+Sans:300,400,500,700];
@media only screen and [min-width:480px] {
.mj-column-per-100 {
width: 100% !important;
max-width: 100%;
}
}
Welcome aboard
Dear {{ name }}
Welcome to {{ app_name }}.
We're really excited you've decided to give us a try. In case you have any questions, feel free to reach out to us at {{ app_contact }}. You can login to your account with your email {{ email }}
Thanks,
The {{ app_name }} Team
Ohiya, untuk web ini dibuat dengan MJML. Web framework yang bisa membuat email responsif dengan gampang, disarankan banget pake ini, karena templatenya pun banyak!
Kalo mau pake templatenya tinggal klik aja disini.
Sekarang kita masuk ke bagian codenya, silahkan ubah sedikit di UserController.py pada method store[].
def store[]:
try:
name = request.json['name']
email = request.json['email']
password = request.json['password'] users = Users[name=name, email=email]
users.setPassword[password]
db.session.add[users]
db.session.commit[]
msg = Message["Hello, {} welcome to Belajar Flask Python".format[name],
sender=""]
msg.add_recipient[email]
# msg.body = "testing"
msg.html = render_template['mail.html', app_name="Learn Flask with Kiddy", app_contact="",
name=name, email=email]
mail.send[msg]
return response.ok['', 'Successfully create data!']
except Exception as e:
print[e]
Jangan lupa import si librarnya.
from app import mail
from flask_mail import Message
from flask import render_template
Tak jelasin dulu deh. Pertama kita inisialisasi object Message kedalam variable msg. Disana kita masukkan “Hello, {} welcome to Belajar Flask Python” sebagai Title email, dan sendernya siapa, tapi karena kita menggunakan Gmail, otomatis sendernya ya si email yang mengirim, kecuali kita pake service 3rd party seperti Mailgun, atau Sendgrid.
Berpacu pada dokumentasi //pythonhosted.org/Flask-Mail/
Kedua, pada saat inisialisasi class Message, sebenernya kita bisa nginput recipients lebih dari satu dengan menggunakan default array.
You can set the recipient emails immediately, or individually:
msg.recipients = [""]
msg.add_recipient[""]
Yang dimana kita sebenrnya bisa set penerimanya duluan, atau satu-satu, kalo mau bulk [sekaligus] ya pakein array. Kita juga bisa put recipients di constructor si Message, kalo kita put di konstruktor recipientsnya wajib ARRAY.
msg = Message["Hello",
sender="",
recipients=[""]]
If the sender is a two-element tuple, this will be split into name and address:
msg = Message["Hello",
sender=["Me", ""]]
Nah kita bisa nih namain si Sender Alias pengirim dengan nama sesuka kita, tapi inget karena kita pake Gmail, pengirimnya pasti si akun Gmailnya ini, kecuali pake SMTP pihak ketiga.
If you have set MAIL_DEFAULT_SENDER you don’t need to set the message sender explicity, as it will use this configuration value by default.
Kalo di Config class kita ada MAIL_DEFAULT_SENDER, maka si Sendernya ngga perlu kita inisialisasi lagi gaes.
Sedangkan, msg.body yang saya comment tuh gunanya cuma buat RAW Email aja, but since kita pake template ya kita comment aja, ngga perlu saya jelasin kan bedanya raw email dengan html email?
# msg.body = "testing"
Finally, to send the message, you use the Mail instance configured with your Flask application:
mail.send[msg]
Nah ini fungsi yang akan menjalankan si emailnya, kalo agan perhatikan nanti di command console kalian keliatan kok processnya.
Sebelum nyoba kita wajib nambahin dulu di .flaskenv kita beberapa parameter tambahan yaitu:
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=xxx
Nah sebelum digas perhatikan dulu. Kalo agan pernah mengikuti tutorial saya yang ngirim email pake Laravel disini
Disitu saya jelaskan kalo email yang digunakan wajib tidak menggunakan two step verification, karena kalo pake pasti error.
Setelah itu akun juga wajib dimatikan Less secure appnya. Bagi akun yang menggunakan two step verification pasti ngga akan bisa, seperit akun email saya yang lain.
Nah pastikan akun kalian tidak menggunakan two step verification dan nyalakan Less Secure App, gunanya adalah agar google bisa berkomunikasi dengan layanan diluar, karena kita menggunakan SMTP-nya Gmail, ya ini wajib dinyalakan.
Dimana cara nyettingnya? Disini:
//myaccount.google.com/u/0/lesssecureapps?pageId=none
Kalo udah beres semua, sekarang kita coba aja nih.
Hasilnya akan nongol di Email kalian.
Gampang toh? Iyalaaa~ Ngga pake ribet ngirim email dari Flask Python, malah cepat, gampang, dan pastinya Python punya performa yang ajib!
Ohiya kalo ada yang mau clone jangan sungkan untuk clone reponya disini, sudah saya update beserta Mail servicenya kok.
Sekian dari saya, hepi coding semuanya!