15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonでメールを送信(Outlook)

Last updated at Posted at 2020-02-09

はじめに

Python で Email を送るプログラムを一から順に説明しながら追っていきたいと思います。

環境は Mac で PyCharm を使用しています。
ホットメールは Outlook を使用します。

import

まずemailからmessageというものがあるのでそちらとsmtplibを import します。
smtplibは smtp サーバをー使用してメール送るものとなっています。

.py
from email import message
import smtplib

設定

メールを送信する際の設定に関して記述していきます。

メールを送るサーバーを指定します。
ホットメールでsmtp.live.comというものが存在するので、ホストに指定します。

.py
from email import message
import smtplib

smtp_host = 'smtp.live.com'

次にポートを記述します。
今回は587を使用します。

.py
from email import message
import smtplib

smtp_host = 'smtp.live.com'
smtp_port = 587

メールの送信元のアドレスを記述します。
メールアドレスはxxxx@outlook.jpとしていますが自分のメールアドレスを記述すれば大丈夫です。

.py
from email import message
import smtplib

smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'

送信元が完了したら送信先のアドレスもto_emailとして記述します。

.py
from email import message
import smtplib

smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'

次にusernameを記述します。
こちらはホットメールのアカウントのユーザーネームなのでメールアドレスがそのまま記述されると思います。

.py
from email import message
import smtplib

smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'

最後にアカウントのパスワードを記述します。

.py
from email import message
import smtplib

smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

上記の内容でメールを誰から誰に送るかの設定とホットメールにログインするための情報が記述できました。

メッセージ

メッセージを作成します。

先ほど import してきたmessageの中にEmailMessage()というオブジェクトがあるので使用します。

.py
from email import message
import smtplib

smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

msg = message.EmailMessage()

メッセージ内容を記述していきます。
set_content()を使用して()内にメールの本文を打ちます。

.py
from email import message
import smtplib

# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

msg = message.EmailMessage()
msg.set_content('こんにちは')

メールの件名と送信元、送信先を記述します。

件名はSubject、送信元はFrom、送信先はToになります。
送信元、送信先に関しては先ほど記述したfrom_emailto_emailの変数を使用します。

.py
from email import message
import smtplib

# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email

サーバーの設定

上記で記述したメッセージをサーバーに送るための設定を記述していきます。

サーバーの指定に import してきたsmtplibSMTPクラスを使用します。
smtplib.SMTP()とし()の中にホストとポートを入れます。

.py
from email import message
import smtplib

# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

#メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email

server = smtplib.SMTP(smtp_host, smtp_port)

smtp とのコネクションの手順として、まずserver.ehlo()でsmtpサーバーと
今からやりとりしますよと呼んであげます。

.py
from email import message
import smtplib

# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

#メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email

server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()

セキュアにするためにserver.starttls()と記述した後に
もう一度server.ehlo()とします。

.py
from email import message
import smtplib

# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

#メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email

server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()

次にホットメールでログインするための情報が聞かれるので
server.login()を使用して()の中にusernamepasswordを記述します。

.py
from email import message
import smtplib

# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

#メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email

server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)

ログインできたらsend_message()を使用して()の中に作成したメッセージ内容を入れます。

.py
from email import message
import smtplib

# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

#メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email

server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
server.send_message(msg)

一番最後にもうサーバーとやりとりしないので終了させるためにserver.quit()とします。

.py
from email import message
import smtplib

# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'

#メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email

# サーバーとのやりとり
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
server.send_message(msg)
server.quit()

実行

上記の内容でメールを自分宛にして
実行してみると実際にメールが送信されたことが確認できます。

image.png

最後に

このメール送信してくれるプログラムを他のプログラムと紐づけて
いろんなことができたらと思います。

15
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?