このトピックでは、排他的リソースグループで実行される PyODPS ノードを使用して、DataWorks でメールを送信する方法について説明します。
背景情報
DataWorks では、PyODPS ノードを作成して MaxCompute と対話し、データ分析と処理を行い、メールを送信できます。また、データプッシュタスクを作成してメールを送信することもできます。
TCP ポート 25 はデフォルトのメールサービスポートです。セキュリティ上の理由から、Elastic Compute Service (ECS) インスタンスでは、TCP ポート 25 はデフォルトで無効になっています。この場合、排他的リソースグループでポート 25 を使用することはできません。ポート 465 を使用してメールを送信することをお勧めします。
PyODPS ノードが排他的リソースグループで実行されてメールを送信する場合、排他的リソースグループのユーザーは、リソースグループ内でメールの送信に使用される ECS インスタンスに接続できません。その結果、ユーザーは追加機能を実装するためにサードパーティの Python モジュールを追加インストールすることができません。
メールを送信する方法
PyODPS ノードを使用してメールを送信する
排他的リソースグループを作成します。
DataWorks コンソール にログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、[リソースグループ] をクリックして、リソースグループページに移動します。
表示されるページの [排他的リソースグループ] タブで、[リソースグループの作成] をクリックします。
ビジネス要件に基づいてパラメーターを構成します。詳細については、「サーバーレスリソースグループを作成して使用する」をご参照ください。
説明作成するリソースグループが DataWorks ワークスペースと同じリージョンにあることを確認してください。
[今すぐ購入] をクリックします。
リソースグループをワークスペースに関連付けます。
作成されたリソースグループを見つけ、[アクション] 列の [ワークスペースの関連付け] をクリックします。
[ワークスペースの関連付け] パネルで、リソースグループを関連付けるワークスペースを見つけ、[アクション] 列の [関連付け] をクリックします。
[datastudio] ページに移動します。
DataWorks コンソール にログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。
PyODPS 2 ノードを作成します。
DataStudio ページで、ポインターを
アイコンの上に移動し、 を選択します。ビジネスフローセクションで目的のワークフローの名前をクリックし、[maxcompute] を右クリックして、 を選択することもできます。
[ノードの作成] ダイアログボックスで、[名前] パラメーターと [パス] パラメーターを構成します。
説明ノード名は 128 文字以内で、文字、数字、アンダースコア (_)、ピリオド (.) を使用できます。
[確認] をクリックします。
PyODPS 2 ノードの構成タブで、次のコードを入力して、簡易メール転送プロトコル (SMTP) を使用してメールを送信します。
import smtplib from email.mime.text import MIMEText from odps import ODPS mail_host = '<yourHost>' # メールサーバーのアドレス。 mail_username = '<yourUserName>' # メールボックスへのログインに使用するユーザー名。 mail_password = '<yourPassWord>' # メールボックスへのログインに使用するパスワード。 mail_sender = '<senderAddress>' # 送信者のメールアドレス。 mail_receivers = ['<receiverAddress>'] # 受信者のメールアドレス。 mail_content="" # 送信するメールの内容。 with o.execute_sql('query_sql').open_reader() as reader: for record in reader: mail_content+=str(record['column_name'])+' '+record['column_name']+'\n' message = MIMEText(mail_content,'plain','utf-8') message['Subject'] = 'mail test' message['From'] = mail_sender message['To'] = mail_receivers[0] try: smtpObj = smtplib.SMTP_SSL(mail_host+':465') smtpObj.login(mail_username,mail_password) smtpObj.sendmail( mail_sender,mail_receivers,message.as_string()) smtpObj.quit() print('mail send success') except smtplib.SMTPException as e: print('mail send error',e)次のコードを入力してメールを送信することもできます。
import smtplib from email.mime.text import MIMEText from odps import ODPS mail_host = 'username@example.com' # メールサーバーのアドレス。 mail_username = 'xxxx' # メールボックスへのログインに使用するユーザー名。 mail_password = 'xxx' # メールボックスへのログインに使用するパスワード。 mail_sender = 'xxx' # 送信者のメールアドレス。 mail_receivers = ['xxx'] # 受信者のメールアドレス。 mail_content="" # 送信するメールの内容。 with o.execute_sql('query_sql').open_reader() as reader: for record in reader: mail_content+=str(record['column_name'])+' '+record['column_name']+'\n' message = MIMEText(mail_content,'plain','utf-8') message['Subject'] = 'mail test' message['From'] = mail_sender message['To'] = mail_receivers[0] try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host,587) smtpObj.ehlo() smtpObj.starttls() smtpObj.login(mail_username,mail_password) smtpObj.sendmail( mail_sender,mail_receivers,message.as_string()) smtpObj.quit() print('mail send success') except smtplib.SMTPException as e: print('mail send error',e)説明PyODPS 2 ノードを使用してメールを送信する場合、PyODPS 2 ノードは読み取ったデータを一時ファイルに保存してから、メールでデータを送信します。送信するメールのデータレコード数に制限はありません。
上部ツールバーの
アイコンをクリックします。
ノードをコミットします。
重要ノードをコミットする前に、[プロパティ] タブで [再実行] パラメーターと [親ノード] パラメーターを構成する必要があります。
上部ツールバーの
アイコンをクリックします。[送信] ダイアログボックスで、[変更の説明] フィールドに情報を入力します。
[確認] をクリックします。
使用しているワークスペースが標準モードの場合、ノードをコミットした後、右上隅にある [デプロイ] をクリックしてノードをデプロイする必要があります。ノードのデプロイ方法の詳細については、「ノードをデプロイする」をご参照ください。
PyODPS 2 ノードの実行に使用するリソースグループを変更します。
PyODPS 2 ノードの構成タブの右上隅にある [オペレーションセンター] をクリックします。
オペレーションセンターページの左側のナビゲーションウィンドウで、 を選択します。
表示されるページで、目的のノードを見つけ、[アクション] 列の を選択します。
[スケジューリングリソースグループの変更] ダイアログボックスで、[新しいリソースグループ] ドロップダウンリストから目的のリソースグループを選択します。
[OK] をクリックします。
ノードをテストします。詳細については、「自動トリガータスクを表示および管理する」をご参照ください。
データプッシュノードを使用してメールを送信する
DataWorks は、データプッシュ機能とデータプッシュノードを提供して、指定されたメールアドレスにデータをプッシュします。
データプッシュノード: DataStudio では、自動トリガーワークフローでデータプッシュノードを作成して、ワークフロー内のノードの出力パラメーターを指定されたメールアドレスにプッシュできます。詳細については、「データプッシュノードを作成する」をご参照ください。
データプッシュ機能: データプッシュ機能を使用すると、DataService Studio でデータプッシュタスクを作成できます。この方法では、データプッシュタスクで単一テーブルまたは複数テーブルのクエリ用の SQL 文を記述して、プッシュするデータを定義し、リッチテキストまたはテーブルを使用してデータを整理できます。スケジューリングサイクルを構成して、指定されたメールアドレスに定期的にデータをプッシュできます。詳細については、「データプッシュ」をご参照ください。
Email にデータをプッシュする場合、各データプッシュノードまたはタスクにメール本文は 1 つだけ追加できます。メール本文が追加されている場合、メール本文を再度追加することはできません。