ひっそりとサイドバーの下辺りにメールフォームのへリンクを追加しました。

Python3 プログラム中から画像を添付したメールを送信するショートプログラム  xrea smtp

Pythonメモ

Python3+SeleniumでFXの自動売買を行っていて、通知メールをプログラム中から飛ばすという機能を追加した。

Python3 プログラム中から日本語OKなメールを送信するショートプログラム  xrea smtp
Python3+SeleniumでFXの自動売買を行っているのだが、プログラム中から通知メールを飛ばす機能を追加しようと思う。 Gmailは無料で使えるの...

いざ実装してみると、通知時のチャートの状態が見たくなってきた。^^;

ってことで自動売買のモニター画面に表示しているチャートを保存して、
メールに添付して飛ばすことにします。

ちなみにチャートは、matplotlib を使って表示しており、.savefig(‘ファイル名’)で簡単に保存できた。
matplotlib 便利だ^^

<smtpサーバー情報>
smtp接続ID:marumusi@infomixer.net
smtp接続パスワード:passpass
サーバーアドレス:s03.xrea.com
smtpポート:587

<メール情報>
キャラクターセット:iso-2022-jp
送信元:smtp接続IDと同じ (xreaのサーバーでは同一の必要性があるため代入)
送信先:webmaster@infomixer.net

<添付ファイル情報>
タイプ:image/jpg
ファイル名:chart.jpg (添付後はFig1.jpgとして送信)

上記はあくまで例なので、自分用に置き換えてね。

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.utils import formatdate
from email import encoders

# SMTPサーバー情報
smtp_id = 'marumusi@infomixer.net'
smtp_ps = 'passpass'
smtp_ad = 's3.xrea.com'
smtp_po = 587

# メール情報
ml_jp = 'iso-2022-jp'
ml_from = smtp_id
ml_to = 'webmaster@infomixer.net'
ml_title = "Python3でメール送信のテストやってます"
ml_text = \
'abcdefg\r\n' \
'0123456789\r\n' \
'ひらがら、カタカナ、漢字\r\n' \
'\r\n' \
'まるむしアンテナ\r\n' \
'https://antenna.infomixer.net\r\n'


#メッセージ 編集
message = MIMEMultipart() # 添付があるのでMultipart
message['Date'] = formatdate()
message['Subject'] = str(Header(ml_title,ml_jp))
message['From'] = ml_from
message['To'] = ml_to
message.attach(MIMEText(ml_text)) # 本文(テキスト)をattach

#画像を添付(Chart.jpg)
attachment = MIMEBase('image', 'jpeg;name="Fig1.jpg"')
file = open('chart.jpg','rb') # 画像なのでバイナリーモードで
attachment.set_payload(file.read())
file.close()
encoders.encode_base64(attachment) # base64でエンコード
attachment.add_header("Content-Dispositon","attachment",filename='Fig1.jpg') 
message.attach(attachment) # 画像をattach

# メール送信
srv = smtplib.SMTP(smtp_ad,smtp_po)
srv.ehlo()
srv.starttls()
srv.ehlo()
srv.login(smtp_id,smtp_ps)
srv.sendmail( ml_from, [ml_to], message.as_string(),)
srv.close()

ちょっと四苦八苦しながら書いたのでおかしな点もあるかもしれませんが、
とりあえずテストでは問題なく送信できたのでここにメモっておきます。

<訂正しました> 2020.20.18
attachment.add_header(“Content-Dispositon”,”attachment”,filename=’Fig1.jpg’)
だけでは添付したファイルが名無しになってしまい、こちらの意図したファイル名で保存できないので修正しました。
どうやらContent-Typeの「name=」で指定した名前が添付のファイルになるようですね。

attachment = MIMEBase(‘image’,’jpg’)
attachment = MIMEBase(‘image’, ‘jpeg;name=”Fig1.jpg”‘)

合わせてコードの記述順も若干変更してます。

<追加しました> 2020.02.24
ヘッダー情報にDateが付加漏れだったので追加しました。
gmailなんかでは勝手に判断して表示するようですが、ルールに従ってヘッダー情報の日時を表示するメーラーでは、日付が空白のままでした。
(そういえば、どこかのPCショップのDMがこの状態で迷惑してる^^;)
以下の2行が追加されました。

from email.utils import formatdate
message[‘Date’] = formatdate()

コメント

タイトルとURLをコピーしました