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

Azureでメールを送信してみる(Python編)

Posted at

Azureでメールを送信してみる(Python編)

事前準備

上の続きです。

VMを起動しておく

ローカル側でHyper-Vマネージャーを起動します。
作成したVMを「起動」で起動しておきます。

VisualStudioCode(VSC)で接続する

VSCを立ち上げます。
左下の><から「ホストへ接続する」を選択して接続先のVMを選択して接続します。

もしようこそ画面しか出ていなくてエクスプローラーがまっさらな場合は左側の一番上から「フォルダーを開く」を選択してホームディレクトリかなんかを開いておきます。

スクリプトファイルの作成

まぁ、別にホームディレクトリでやってもいいですが念のためディレクトリを切り分けます。
VSC左側のエクスプローラーから「新しいフォルダ」で作成します。
(今回は azmail という名前で作っています。)

エクスプローラーで作成したディレクトリを選択し、「新しいファイル」を選択します。
(今回は azmail.py という名前で作成しています。)

Azureからサンプルコードを持ってくる

Azureポータルにログインします。
「通信サービス」を選択し、作成したリソースを選択します。
「メール」の下に「メールを試す」があるのでそれを選択します。

「メールの送信元」と「送信者のメールユーザー名」をドロップダウンから選択します。
「受信者のメールアドレス」には受信可能なメールアドレスを設定します。

右側のサンプルコードに反映されたのが確認できると思います。
タブを「Python」に切り替えて、「接続文字列を挿入する」にチェックを入れます。

「接続文字列を選択する」の右側に「コピー」ボタンがあるので押します。
これでクリップボードにサンプルコードがコピーされるので、作成したファイルに貼り付けます。

実行する前に

このままで実行できそうな気配を見せておいて実は色々足りない状態です。

pipのインストール

VSCの下側にコマンドプロンプトというかCLIというかがあると思います。
(ない人は「表示」から「ターミナル」で表示させてください。)
ターミナルの中は普通にSSHで接続した状態になっています。
とりあえずまずはpipをインストールします。

sudo apt install python3-pip

Azure Communication Services Email SDK パッケージのインストール

クイック スタート: Azure Communication Services を使用して電子メールを送信する方法

公式のドキュメントには書いてありますが、SDKをインストールしないと動きません。
ということでインストールします。

※ システム全体へのグローバルインストール用のコマンドです。venv使ってるとかの場合は公式のドキュメントの方のコマンドでやってください。

sudo pip install azure-communication-email --break-system-packages

試しに送ってみる

とりあえずスクリプトのあるディレクトリに移動します。

cd ~/azmail

実行権限つけときましょう。

chmod 755 azmail.py

おくりまーす

python3 azmail.py

やっぱりサンプル壊れとるやんけ

  File "/home/puipui/azmail/azmail.py", line 5
    connection_string = ""endpoint=https://<puipui>.japan.communication.azure.com/;accesskey=<puipui>""
                                                                                                    ^
SyntaxError: invalid decimal literal

なんとなくそうかなーとは思ってましたが、まぁ変ですよね。

"" なんでここに文字列? ""
"ここに文字列だよね"

ということで直します

# connection_string = ""endpoint=https://<puipui>.japan.communication.azure.com/;accesskey=<puipui>""
connection_string = "endpoint=https://<puipui>.japan.communication.azure.com/;accesskey=<puipui>"

気を取り直して再送

$ python3 azmail.py
'dict' object has no attribute 'message_id'

ヴぉーん?
オブジェクトの中にmessage_idなんか無いぞって言ってますね。

コードでいうと28行目のこれですね。

        print("Message sent: ", result.message_id)

ドキュメント読むのもめんどいのでそのままダンプしてみてみます。

        print(result)
        print("Message sent: ", result.message_id)

ちょっと通りますよっと。

$ python3 azmail.py
{'id': 'puipui-pui-pui-pui-puipui', 'status': 'Succeeded', 'error': None}
'dict' object has no attribute 'message_id'

message_idじゃなくてidに変わってるみたいですね。
(というかPythonってドットアクセスできるんだっけ?公式みてもそれっぽいの無いような。。。)

ということでとりあえず直しておきます。

        # print("Message sent: ", result.message_id)
        print("Message sent: ", result['id'])

気を取り直して送信しましょう。

$ python3 azmail.py
{'id': 'puipui-pui-pui-pui-puipui', 'status': 'Succeeded', 'error': None}
Message sent:  puipui-pui-pui-pui-puipui

ということで修正したサンプルコード

from azure.communication.email import EmailClient

def main():
    try:
        connection_string = "endpoint=https://<puipui>.japan.communication.azure.com/;accesskey=<puipui>"
        client = EmailClient.from_connection_string(connection_string)

        message = {
            "senderAddress": "okuri-puipui@localhost",
            "recipients": {
                "to": [{"address": "jusin-puipui@localhost"}]
            },
            "content": {
                "subject": "テスト メール",
                "plainText": "メールで Hello World。",
                "html": """
				<html>
					<body>
						<h1>メールで Hello World。</h1>
					</body>
				</html>"""
            },
        }

        poller = client.begin_send(message)
        result = poller.result()
        print("Message sent: ", result['id'])

    except Exception as ex:
        print(ex)

main()

メールが届かない場合

どっかに書いたと思いますが、たぶんメールプロバイダーが弾いています。
gmailとかoutlookなら届くのでそっちに送ってみましょう。

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