1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Microsoft 365(Outlook) や Gmail であれば、Workatoの標準コネクターを使用して、API経由でメールを送信することができます。

2024年3月現在、SMTP を用いてメールを送る「SMTPコネクター」は、Workatoでは提供されておりません。メールゲートウェイ製品などを経由するなどの目的で、SMTP を用いてメールを送信したい場合はどうしたらよいのでしょうか?

Python コネクターを使ってSMTPでメールを送信

答えは、Python コネクターを使います。Python には、smtplib という SMTPプロトコルクライアント が標準ライブラリとして提供されています。

Workato の Python コネクターは、公式ドキュメントによると Python 3.9以降となっているので、この smtplib も利用可能です。このライブラリを利用することで、Workatoから SMTP を用いてメールを送信することが可能となります。

Python アクションの作成

アクションの名前を設定

Pythonコネクターの Execute Code アクションを選択し、[Name] を入力します。
image.png

アクションの入力項目を設定

メールの送信に必要な [Input fields] (入力項目)を追加します。

  • SMTP Server (SMTPサーバーのアドレス)
  • SMTP Port (SMTPサーバーのポート番号)
  • SMTP User (SMTPサーバーの認証ユーザー)
  • SMTP Password (SMTPサーバーの認証パスワード)
  • To (送信先のメールアドレス)
  • From (送信元のメールアドレス)
  • Subject (メールのタイトル)
  • Body (メールの本文)
  • Attachment File Contents (添付ファイルのコンテンツ)
  • Attachment File Name (添付ファイル名)

image.png

Box や オンプレミスなどから取得したファイルを、Attachment File Contents に指定することで、添付ファイルを渡すことも可能です。(画面の例は、Boxからダウンロードしたファイルを添付ファイルとして指定)

Pythonコードを記述

入力項目を使って、メールを送るコードを記述します。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders


def main(input):
    try:
        # SMTPサーバー設定
        smtp_server = input["smtp_server"]
        smtp_port = input["smtp_port"]
        smtp_user = input["smtp_user"]
        smtp_password = input["smtp_password"]

        # メール設定
        from_addr = input["from"]
        to_addr = input["to"]
        subject = input["subject"]
        body = input["body"]

        # メールメッセージの作成
        msg = MIMEMultipart()
        msg["From"] = from_addr
        msg["To"] = to_addr
        msg["Subject"] = subject

        # メール本文の追加
        msg.attach(MIMEText(body, "plain"))

        # 添付ファイルの追加
        if "attachment_file_contents" in input and "attachment_file_name" in input:
            attachment = MIMEBase("application", "octet-stream")
            attachment.set_payload(input["attachment_file_contents"])
            encoders.encode_base64(attachment)
            attachment.add_header(
                "Content-Disposition",
                "attachment",
                filename=input["attachment_file_name"],
            )
            msg.attach(attachment)

        # SMTPサーバーを通じてメール送信
        with smtplib.SMTP(smtp_server, smtp_port) as server:
            server.starttls()
            server.login(smtp_user, smtp_password)
            server.sendmail(from_addr, to_addr, msg.as_string())
            server.quit()

        print("メール送信完了")

    except Exception as e:
        # print(e)
        raise

上のコードでは、メールが正常に送信できた場合は、標準出力に「メール送信完了」と書き込んでいます。こうすることで、Workatoの Job の実行履歴上で、このステップが実行されたことを確認することができます。

image.png

また、上のコードでは例外が発生した場合、元の例外をそのまま上に投げることでアクションをエラー終了させています。この例外の内容は Jobの実行履歴から確認することができます。

image.png

もちろん、補足した例外を新しい Exception を作成して投げなおせば、任意のエラーメッセージを表示させることも可能です。

        # (省略)...
        print("メール送信完了")

    except Exception as e:
        # print(e)
        raise Exception("メール送信に失敗しました", e)

image.png

まとめ

まとめると、以下のようになります。

  • SMTPでメールを送信する標準コネクタは提供されていない
  • Pythonアクションを使うことで、SMTP でメールを送信可能

おわりに

いかがでしょうか? Pythonアクションを使用してデータ加工を行うユースケースは多いかと思いますが、SMTPサーバに接続するような通信処理も Pythonアクション内で行うことができます。このように、Pythonアクションを使うことで、「Workatoでできること」を広げることが可能です。

Workatoの導入・導入後の活用などでお困りの場合、Workatoリセラーにご相談する方法もございます。お困りごとがございましたら、認定リセラーの日立ソリューションズへ是非ご相談ください。

参考リンク

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?