大量にyahooメールを送信する

下記サイトを参考に大量にメールを送信するプログラムにしました。
アカウントで1日最大500通送付できます（ヤフーの仕様でそれ以上はできない）
https://cercopes-z.com/Python/tips-mail-py.html#yahoo-36

send_yahoomail_jp_3_6.pyとyahoomail.pyを同じフォルダに入れます。
yahoomail.pyを実行すればOKです。

基本yahoomail.pyのヤフーアドレスとパスワード、メールの内容を編集するだけで使えます。

セーフティアドレスを使う場合send_yahoomail_jp_3_6.pyのコメントアウトしているところをいじってください。

```send_yahoomail_jp_3_6.py
# send_yahoomail_jp_3_6.py
# Yahoo!メール 送信 (Python 3.6 以上)

import mimetypes
import os
import smtplib
from email.message import EmailMessage

# Yahoo!メール 送信 クラス
class YahooMailJp:
    # コンストラクタ
    def __init__(self, user, password):
        self._user = user
        self._password = password


    # メール送信 (SSL)
    def send(self, subject, body, to, cc=None, bcc=None, *, files=[], debug=0):
        YAHOO_SMTP_SERVER = "smtp.mail.yahoo.co.jp"
        YAHOO_PORT_SSL = 465
        YAHOO_MAIL_SUFFIX = "@yahoo.co.jp"
        DEBUG_TRACE = 8

        trace = True if (debug == DEBUG_TRACE) else False
        if trace:
            print("開始：Yahoo!メール 送信 (SSL)")

        # メール作成
        msg = EmailMessage()

        # ヘッダー情報 設定
        msg['Subject'] = subject
        msg['From'] = self._user + YAHOO_MAIL_SUFFIX
        #msg['From'] = "セーフティアドレスを使う場合はここにアドレスを入力して、上をコメントアウト"
        msg['To'] = to
        if cc is not None:
            msg['Cc'] = cc
        if bcc is not None: 
            msg['Bcc'] = bcc
        if trace:
            print("Subject:", msg['Subject'])
            print("From:", msg['From'])
            print("To:", msg['To'])
            print("Cc:", msg['Cc'])
            print("Bcc:", msg['Bcc'])

        # 本文設定
        html = body.startswith("<html>")
        msg.set_content(body)
        if html:
            msg.set_type("text/html")

        # 添付ファイル追加
        if trace:
            print("FILES:", len(files))
        for file in files:
            ctype, encoding = mimetypes.guess_type(file)
            if (ctype is None) or (encoding is not None):
                ctype = 'application/octet-stream'
            maintype, subtype = ctype.split('/', 1)
            with open(file, 'rb') as fp:
                msg.add_attachment(
                        fp.read(),
                        maintype=maintype,
                        subtype=subtype,
                        filename=os.path.basename(file))
                if trace:
                    print(f"  {file} ({maintype}/{subtype})")

        # メール送信 (SSL)
        with smtplib.SMTP_SSL(YAHOO_SMTP_SERVER, YAHOO_PORT_SSL) as smtp:
            # デバッグ出力レベル設定
            if not trace:
                smtp.set_debuglevel(debug)
            # ログイン
            smtp.ehlo()
            if trace:
                print("Support:", smtp.esmtp_features)
            smtp.login(self._user, self._password)
            # メール送信
            result = smtp.send_message(msg)
            # with文により QUITコマンド自動発行

        if trace:
            if len(result) != 0:
                print(result)
            print("終了：Yahoo!メール 送信 (SSL)\n")
        return result
```

```yahoomail.py
from send_yahoomail_jp_3_6 import YahooMailJp
from time import sleep
import random, string

yahoo_user = "ヤフーアカウント名"  # @yahoo.co.jp 省略
yahoo_password = "パスワード"

# Yahoo!メール 送信 オブジェクト生成
yahoo_mail = YahooMailJp(yahoo_user, yahoo_password)

# プレーンテキスト
subject = "件名：amazonギフト券のコードです "
body = "本文１\n本文２\n本文３"
to = " "
yahoo_mail.send(subject, body, to)
"""
# HTMLテキスト・TO (複数)
subject = "件名：Yahoo!メール HTMLテキスト TO (複数)"
body = "<html>本文１<br><b style='color: red;'>本文２</b><br>本文３</html>"
to = ("chocolate.3.planette@gmail.com", "chocolate.3.planette@gmail.com")
yahoo_mail.send(subject, body, to)

# プレーンテキスト・添付ファイル
subject = "件名：amazonギフト券のコードです "
body = "本文"
to = "chocolate.3.planette@gmail.com"
files = ("./mail/a.jpg", "./mail/b.jpg", "./mail/c.jpg")
"""
#仮のギフト券番号
def randomname(n):
   randlst = [random.choice(string.ascii_letters + string.digits) for i in range(n)]
   return ''.join(randlst)

#100通メール送信
for num in range(100):
    
   # body = randomname(4)+"-"+randomname(5)+"-"+randomname(5)
    yahoo_mail.send(subject, body, to, files=files)
    print(num)
```