はじめに
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] を入力します。
アクションの入力項目を設定
メールの送信に必要な [Input fields] (入力項目)を追加します。
- SMTP Server (SMTPサーバーのアドレス)
- SMTP Port (SMTPサーバーのポート番号)
- SMTP User (SMTPサーバーの認証ユーザー)
- SMTP Password (SMTPサーバーの認証パスワード)
- To (送信先のメールアドレス)
- From (送信元のメールアドレス)
- Subject (メールのタイトル)
- Body (メールの本文)
- Attachment File Contents (添付ファイルのコンテンツ)
- Attachment File Name (添付ファイル名)
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 の実行履歴上で、このステップが実行されたことを確認することができます。
また、上のコードでは例外が発生した場合、元の例外をそのまま上に投げることでアクションをエラー終了させています。この例外の内容は Jobの実行履歴から確認することができます。
もちろん、補足した例外を新しい Exception を作成して投げなおせば、任意のエラーメッセージを表示させることも可能です。
# (省略)...
print("メール送信完了")
except Exception as e:
# print(e)
raise Exception("メール送信に失敗しました", e)
まとめ
まとめると、以下のようになります。
- SMTPでメールを送信する標準コネクタは提供されていない
- Pythonアクションを使うことで、SMTP でメールを送信可能
おわりに
いかがでしょうか? Pythonアクションを使用してデータ加工を行うユースケースは多いかと思いますが、SMTPサーバに接続するような通信処理も Pythonアクション内で行うことができます。このように、Pythonアクションを使うことで、「Workatoでできること」を広げることが可能です。
Workatoの導入・導入後の活用などでお困りの場合、Workatoリセラーにご相談する方法もございます。お困りごとがございましたら、認定リセラーの日立ソリューションズへ是非ご相談ください。
参考リンク
- 株式会社 日立ソリューションズ
- Workato 公式サイト
- 本記事のサンプルレシピ