すべてのプロダクト
Search
ドキュメントセンター

DataWorks:PyODPS ノードを使用してメールを送信する

最終更新日:Mar 26, 2025

このトピックでは、排他的リソースグループで実行される PyODPS ノードを使用して、DataWorks でメールを送信する方法について説明します。

背景情報

DataWorks では、PyODPS ノードを作成して MaxCompute と対話し、データ分析と処理を行い、メールを送信できます。また、データプッシュタスクを作成してメールを送信することもできます。

説明
  • TCP ポート 25 はデフォルトのメールサービスポートです。セキュリティ上の理由から、Elastic Compute Service (ECS) インスタンスでは、TCP ポート 25 はデフォルトで無効になっています。この場合、排他的リソースグループでポート 25 を使用することはできません。ポート 465 を使用してメールを送信することをお勧めします。

  • PyODPS ノードが排他的リソースグループで実行されてメールを送信する場合、排他的リソースグループのユーザーは、リソースグループ内でメールの送信に使用される ECS インスタンスに接続できません。その結果、ユーザーは追加機能を実装するためにサードパーティの Python モジュールを追加インストールすることができません。

メールを送信する方法

PyODPS ノードを使用してメールを送信する

  1. 排他的リソースグループを作成します。

    1. DataWorks コンソール にログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、[リソースグループ] をクリックして、リソースグループページに移動します。

    2. 表示されるページの [排他的リソースグループ] タブで、[リソースグループの作成] をクリックします。

    3. ビジネス要件に基づいてパラメーターを構成します。詳細については、「サーバーレスリソースグループを作成して使用する」をご参照ください。

      説明

      作成するリソースグループが DataWorks ワークスペースと同じリージョンにあることを確認してください。

    4. [今すぐ購入] をクリックします。

  2. リソースグループをワークスペースに関連付けます。

    1. 作成されたリソースグループを見つけ、[アクション] 列の [ワークスペースの関連付け] をクリックします。

    2. [ワークスペースの関連付け] パネルで、リソースグループを関連付けるワークスペースを見つけ、[アクション] 列の [関連付け] をクリックします。

  3. [datastudio] ページに移動します。

    DataWorks コンソール にログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、[データ開発と O&M] > [データ開発] を選択します。表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。

  4. PyODPS 2 ノードを作成します。

    1. DataStudio ページで、ポインターを image.png アイコンの上に移動し、[ノードの作成] > [maxcompute] > [pyodps 2] を選択します。

      ビジネスフローセクションで目的のワークフローの名前をクリックし、[maxcompute] を右クリックして、[ノードの作成] > [pyodps 2] を選択することもできます。

    2. [ノードの作成] ダイアログボックスで、[名前] パラメーターと [パス] パラメーターを構成します。

      説明

      ノード名は 128 文字以内で、文字、数字、アンダースコア (_)、ピリオド (.) を使用できます。

    3. [確認] をクリックします。

    4. 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 ノードは読み取ったデータを一時ファイルに保存してから、メールでデータを送信します。送信するメールのデータレコード数に制限はありません。

    5. 上部ツールバーの 保存 アイコンをクリックします。

  5. ノードをコミットします。

    重要

    ノードをコミットする前に、[プロパティ] タブで [再実行] パラメーターと [親ノード] パラメーターを構成する必要があります。

    1. 上部ツールバーの 提交 アイコンをクリックします。

    2. [送信] ダイアログボックスで、[変更の説明] フィールドに情報を入力します。

    3. [確認] をクリックします。

    使用しているワークスペースが標準モードの場合、ノードをコミットした後、右上隅にある [デプロイ] をクリックしてノードをデプロイする必要があります。ノードのデプロイ方法の詳細については、「ノードをデプロイする」をご参照ください。

  6. PyODPS 2 ノードの実行に使用するリソースグループを変更します。

    1. PyODPS 2 ノードの構成タブの右上隅にある [オペレーションセンター] をクリックします。

    2. オペレーションセンターページの左側のナビゲーションウィンドウで、[自動トリガーノード O&M] > [自動トリガーノード] を選択します。

    3. 表示されるページで、目的のノードを見つけ、[アクション] 列の [詳細] > [スケジューリングリソースグループの変更] を選択します。

    4. [スケジューリングリソースグループの変更] ダイアログボックスで、[新しいリソースグループ] ドロップダウンリストから目的のリソースグループを選択します。

    5. [OK] をクリックします。

  7. ノードをテストします。詳細については、「自動トリガータスクを表示および管理する」をご参照ください。

データプッシュノードを使用してメールを送信する

DataWorks は、データプッシュ機能とデータプッシュノードを提供して、指定されたメールアドレスにデータをプッシュします。

  • データプッシュノード: DataStudio では、自動トリガーワークフローでデータプッシュノードを作成して、ワークフロー内のノードの出力パラメーターを指定されたメールアドレスにプッシュできます。詳細については、「データプッシュノードを作成する」をご参照ください。

  • データプッシュ機能: データプッシュ機能を使用すると、DataService Studio でデータプッシュタスクを作成できます。この方法では、データプッシュタスクで単一テーブルまたは複数テーブルのクエリ用の SQL 文を記述して、プッシュするデータを定義し、リッチテキストまたはテーブルを使用してデータを整理できます。スケジューリングサイクルを構成して、指定されたメールアドレスに定期的にデータをプッシュできます。詳細については、「データプッシュ」をご参照ください。

説明

Email にデータをプッシュする場合、各データプッシュノードまたはタスクにメール本文は 1 つだけ追加できます。メール本文が追加されている場合、メール本文を再度追加することはできません。