Help us understand the problem. What is going on with this article?

f5: Pythonista でメール送信

.
iphone でメールアプリが、
(iosのバージョンが古いためもあるけど)
「不安定」「懐疑」「不明通信で処理が遅い」
など問題が多いため、いまさらですが、即送信用に
Pythonista でメール送信をテスト

(1) メールの入力

 xxx.txt 保存ができるテキストエディタアプリ
 (Textforce や Textastic など)で、以下を入力

 1行目:送信先メールアドレス
 2行目:件名
 3行目以降:本文

(2) Open in -> Pythonista のスクリプト呼び出し

(3) コンソール上にて実行

[ 1. キッチン ]

Textforce (テキストエディタアプリ)

Pythonista v2.1.1

iphone SE / ios 9.3.5
iphone 5s / ios 12.1.4

[ 2. 仕込 ]

text-open-mail.py
# coding: utf-8

import os
import appex
import shutil
import console
import datetime

import smtplib
from email.MIMEText import MIMEText
from email.Utils import formatdate
from email.Header import Header

now1 = datetime.datetime.now()
now2 = '{0:%Y/%m/%d %H:%M:%S}'.format(now1)

cpedf1 = ''
cpedf3 = ''
cpedf4 = ''
cpedf5 = ''

# テキストアプリ -> open in -> pythonista /Shared/
# に テキストファイルをコピー後、ファイル名を取得(cpedf1)
def main():
    FILE = appex.get_file_paths()
    PYPATH = os.path.abspath(os.path.dirname(__file__))
    while os.path.basename(PYPATH) != 'Documents':
        PYPATH = os.path.abspath(os.path.join(PYPATH, os.pardir))
    PYPATH = os.path.join(PYPATH, 'Shared')
    if not os.path.isdir(PYPATH):
        os.mkdir(PYPATH)

    for i in FILE:
        if os.path.isfile(i):
            NAME = os.path.basename(i)
            shutil.copyfile(i, os.path.join(PYPATH, NAME))
            global cpedf1
            cpedf1 = NAME
        if os.path.isdir(i):
            shutil.copytree(i, PYPATH)

if __name__ == '__main__':
    if appex.is_running_extension():
        main()
    else:
        console.alert('Error Occured', 'Please launch from extension', 'ok', hide_cancel_button=True)

iu1 = 0
iu2 = ''
iu4 = 0
iu5 = ''
iu6 = 0
iu7 = ''
iu8 = ''
iu9 = ''

# テキストファイルを読み込み
# 1行目 TOアドレス、2行目 件名
# 1行目 @ が無い、または 空の場合はアドレス入力エラー
# 1行目 措定簡易入力(例 taro) は フルアドレスに変換
# (iu2: TO, iu7: 件名, iu5: 本文)
cpedf3 = './Shared/'
with open(cpedf3 + cpedf1) as linef:
    for linm in linef:
        iu8 = iu8 + linm
        iu3 = linm.strip()
        if iu1 == 0:
            if iu3 != '':
                iu6 = linm.find("@")
                if iu6 != -1:
                    iu4 = 1
                    iu9 = 'OK: アドレス'
                    iu2 = iu3
                else:
                    if iu3 == 'taro':
                        iu4 = 1
                        iu2 = 'taro2019@mailaddress.com'
                    else:
                        iu4 = 2
                        iu9 = 'NG: アドレス @ 無し'
                        iu2 = iu3
            else:
                iu4 = 3
                iu9 = 'NG: アドレス 空'
                iu2 = iu3
        elif iu1 == 1:
            iu7 = iu3
        else:
            iu5 = iu5 + linm
        iu1 = iu1 + 1
linef.close()

# コンソール上確認用(iu2: TO, iu7: 件名, iu5: 本文)
print ''
print iu9
print 'iu2: ' + iu2
print iu4
print 'iu7: ' + iu7
print ''
print 'iu5: ' + '\n' + iu5
print '本文ここまで'
print ''

# if: 通常送信、else: アラート送信
if iu4 == 1:
    TO = iu2
    cpedf4 = iu7
    cpedf5 = iu5 + '\n'
    BCC = 'backup@mailaddress.com'
else:
    TO = 'alert@mailaddress.com'
    cpedf4 = 'ALERT: アドレス入力エラー - ' + now2
    cpedf5 = iu9 + '\n\n' + iu8 + '\n' 
    BCC = ''

FROM = 'from@mailaddress.com'
CC = ['', '']
CC_ADD = ', '.join(CC) 
ENCOD = 'utf-8'

message = MIMEText(cpedf5.encode(ENCOD),'plain',ENCOD,)
message['Subject'] = str(Header(cpedf4, ENCOD))
message['From'] = FROM
message['To'] = TO
message['Cc'] = CC_ADD
message['Date'] = formatdate()

# SMTP (gmail の場合)
s = smtplib.SMTP('smtp.gmail.com', 587)

s.ehlo()
s.starttls()
s.ehlo()

# 送信元のアドレス、パスワード
s.login('from@mailaddress.com', 'password')

s.sendmail(FROM, [TO, CC_ADD, BCC], message.as_string())
s.close()

print '処理完了'
print ''


[ 3. デザート ]

※ 簡易的ざっくり作成なので
 プロセスエラーや細かなエラーは拾ってません

※ Pythonista v3 未確認(多分いけると思います)

※ gmail の場合は
「安全性の低いアプリの許可」-> 有効 が必要です

.

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away