AppWriteのJavaクラウド機能を使用してウェルカムメールを送信!


AppWrite 0.9は、クラウド関数のJavaとKOTLIN Runtimeのサポートを追加し、サポートされているランタイムのリストを15以上にすることができます
このチュートリアルでは、Javaクラウド関数の作成とアップロードの過程を参照します.特に、私たちはどのように彼らがサインアップするときにカスタマイズされたウェルカムメールをユーザーに送信する雲機能を使用する方法をお教えします!この例では、AppWriteがサードパーティのAPIとシームレスに統合でき、既存のスタックと共存する方法を強調します.更なるADOなしで、右に飛び込んでみましょう!

📝 必要条件


この段階では、AppWriteインスタンスを既に実行していると仮定します.AppWriteのセットアップをまだしていない場合は、上で超簡単なインストールステップに従うことができますappwrite.io . それはタイプミスではない.本当に1つだけステップです!
また、セットアップする必要がありますMailgun or SendGrid アカウントをメールを送信できるようにする.

📽️ プロジェクト作成


Intellijを使用して新しいMavenプロジェクトを作成します.それに応じて名前とアーティファクトIDを設定し、「完了」をクリックします.

プロジェクトが作成されると、依存関係を追加します.この例では、HTTPリクエストを作成するための依存関係が1つだけ必要になります.

  • Unirest Java ( COM . mashape . unirest : Unirest Java : 1.4.9 )
  • 次の行を<dependencies> あなたのセクションpom.xml ファイル.
    <dependencies>
        <dependency>
            <groupId>com.mashape.unirest</groupId>
            <artifactId>unirest-java</artifactId>
            <version>1.4.9</version>
        </dependency>
    </dependencies>
    
    UIからMavenの依存関係を更新するか、ショートカットを使用するCtrl + Shift + O

    👩‍💻 コードを書く


    依存関係を取得すると、コードを書く時が来ます.
    Javaクラスの作成src/main/java そして名前WelcomeEmail.java .
    次に、main すべての環境変数を取得し、環境変数APPWRITE_FUNCTION_EVENT_DATA . APPWRITE_FUNCTION_EVENT_DATA はイベントによって引き起こされるときに自動的にクラウド関数に渡される特別な環境変数です.この場合、クラウド関数は users.create and account.create イベント、したがってペイロードAPPWRITE_FUNCTION_EVENT_DATA を含むUser Object .
    我々は、パーソナライズされたメールを送信することができますので、ユーザーの名前とメールIDに興味を持っています.ここでそれらの値を抽出します.
    import com.mashape.unirest.http.exceptions.UnirestException;
    import org.json.JSONObject;
    
    public class WelcomeEmail {
    
        private static String YOUR_DOMAIN_NAME;
        private static String API_KEY;
    
        public static void main(String[] args) throws UnirestException {
            YOUR_DOMAIN_NAME = System.getenv("MAILGUN_DOMAIN");
            API_KEY = System.getenv("MAILGUN_API_KEY");
            String payload = System.getenv("APPWRITE_FUNCTION_EVENT_DATA");
    
            if (payload != null && !payload.isEmpty()) {
                try {
                    // Parse the JSON string into a JSON Object
                    JSONObject json = new JSONObject(payload);
                    String name = json.getString("name");
                    String email = json.getString("email");
    
                } catch (Exception e) {
                    System.out.print("[ERROR] There was an error");
                    System.out.println(e.getMessage());
                }
            } else {
                System.out.println("[INFO] APPWRITE_FUNCTION_EVENT_DATA is empty");
            }
        }
    }
    
    
    他の環境変数についてはまだ心配しないでください.
    次に、郵送銃APIにポストリクエストを送る単純な機能を作成して、我々の電子メールを送りましょう.
    import com.mashape.unirest.http.HttpResponse;
    import com.mashape.unirest.http.Unirest;
    
    public static String sendSimpleMessage(String name, String email) throws UnirestException {
    
        String message = String.format("Hi %s!", name);
    
        HttpResponse<String> request = Unirest.post("https://api.mailgun.net/v3/" + YOUR_DOMAIN_NAME + "/messages")
                .basicAuth("api", API_KEY)
                .field("from", "Your Awesome App <[email protected]>")
                .field("to", email)
                .field("subject", "Welcome Onboard")
                .field("text", message)
                .asString();
    
        return request.getBody();
    }
    
    最後に、この関数を主な関数から呼び出します.
    public static void main(String[] args) throws UnirestException {
            YOUR_DOMAIN_NAME = System.getenv("MAILGUN_DOMAIN");
            API_KEY = System.getenv("MAILGUN_API_KEY");
            String payload = System.getenv("APPWRITE_FUNCTION_EVENT_DATA");
    
            if (payload != null && !payload.isEmpty()) {
                try {
                    JSONObject json = new JSONObject(payload);
                    String name = json.getString("name");
                    String email = json.getString("email");
    +               String response = sendSimpleMessage(name, email);
    +               System.out.println(response);
                } catch (Exception e) {
                    System.out.print("[ERROR] There was an error");
                    System.out.println(e.getMessage());
                }
    
            } else {
                System.out.println("[INFO] APPWRITE_FUNCTION_EVENT_DATA is empty");
            }
    
        }
    
    すべての必要なコードを書いたので、私たちは.jar . 幸いにも、これは本当に簡単にIntellijを使用して行うことができますので、見てみましょう.

    ⚙️ アーチファクトを設定します。


    このステップでは、我々は.jar 我々のクラウド機能を展開するのに必要な人工物.絹篩で篩うたようFile > Project Structure > Artifacts スクリーンショットで見られるように.

    次のダイアログで、メインクラスを選択します.WelcomeEmail ) 画像に示すように.

    Note: If you don't see the main class, try to follow the steps in this answer https://stackoverflow.com/questions/10654120/error-could-not-find-or-load-main-class-in-intellij-ide


    次のダイアログで「適用」をクリックし、[ OK ]をクリックします.
    新しいファイルが作成されたことを確認しますsrc/main/java/META-INF/MANIFEST.MF を返します.
    Manifest-Version: 1.0
    Main-Class: WelcomeEmail
    
    今すぐあなたの工芸品を使用してビルドBuild > Build Artifacts > Select your artifact from the list > Build . このステップの出力はout/artifacts/welcome_email_jar/welcome-email.jar

    🧪 ローカルテスト


    すごい!あなたの関数がうまく機能していてコンパイル問題がないかテストしましょう.Javaプロジェクトのルートディレクトリから次のコマンドを実行します.必要な環境変数の値を自分の設定の値に置き換えてください.
  • メイグンキーアキーキーキー
  • ドメイン
  • データを取得する
  • あなたのメールガンドメインはsandboxie 5 d…のように見えます.B 85.メールガン.org. また、電子メールアドレスがauthorized recipient .
    docker run --rm --volume $(pwd):/usr/local/src:rw \                                   
        --env MAILGUN_API_KEY="YOUR_API_KEY" \
        --env MAILGUN_DOMAIN="sandboxee5d...b85.mailgun.org" \
        --env APPWRITE_FUNCTION_EVENT_DATA="{ \"name\" : \"Example\", \"email\": \"[email protected]\"}" \
        appwrite/runtime-for-java:11 \
        java -jar out/artifacts/welcome_email_jar/welcome-email.jar 
    
    すべてがうまくいくならば、あなたは以下の出力を見なければなりません
    {
      "id": "<[email protected]>",
      "message": "Queued. Thank you."
    }
    

    🌩️ クラウド機能の作成


    AppWriteダッシュボードにヘッドをオンにし、サイドバーの[関数]タブに移動し、[関数の追加]をクリックします.あなたの関数に名前を与え、適切なJavaランタイムを選択しCreate . CLIDを使用して関数を展開するには、関数IDを注意してください.
    次に、クラウド関数の設定タブに進み、必要な環境変数を追加し、この関数をトリガーするイベントを選択します.私たちの場合ではaccount.create and users.create .

    更新をクリックして設定を保存することを忘れないでください.

    ↗️ 配備と実行


    我々は今、我々の機能を展開する準備が整いました.この手順は、appwrite CLIまたは手動で行うことができます.

    👀 手動での配備


    Javaプロジェクトのルートディレクトリに、次のコマンドを実行してtarfile .
    $ cd out/artifacts
    
    $  tar -zcvf code.tar.gz welcome_email_jar 
    
    welcome_email_jar/
    welcome_email_jar/welcome-email.jar
    
    $  ls
    code.tar.gz  welcome_email_jar
    
    これは新しいアーカイブを作成しますcode.tar.gz .
    これで、あなたの頭にAppwrite Dashboard > Functions > Overview > Deploy Tag . ポップアップで開くダイアログでtarfile 我々は、作成と使用java -jar welcome-email.jar エントリポイントコマンド.
    あなたの機能が正常にアップロードされると、アクティブボタンをクリックして、あなたのタグをアクティブにする必要があります.
    偉大な、我々の機能を引き起こすために、我々はユーザーを作成する必要があります.サイドバーのユーザーセクションに頭を通して、承認された受取人のリストに存在する電子メールIDを使用している新しいユーザーをつくってください.すべてがうまくいくならば、あなたは下で実行ログを見ることができなければなりませんLogs タブ.

    ⌨️ CLIでの配備


    AppWrite CLIを使用する場合は、Javaプロジェクトのルートディレクトリから次のコマンドを実行します.IDを自分の値で置き換えるようにしてください.あなたのAppWriteダッシュボードからあなたの機能IDを得ることができます.
    $ cd out/artifacts/
    
    $ appwrite functions createTag --functionId=60d5839682e94 --command="java -jar welcome-email.jar" --code=welcome_email_jar
    
    $id : 60d58cacb0748
    functionId : 60d5839682e94
    dateCreated : 1624607916
    command : java -jar welcome-email.jar
    size : 1808608
    
    $  appwrite functions updateTag --functionId=60d5839682e94 --tag=60d58cacb0748
    
    $id : 60d5839682e94
    $permissions : 
    name : Welcome Email Test
    dateCreated : 1624605590
    dateUpdated : 1624606138
    status : disabled
    runtime : java-11
    tag : 60d58cacb0748
    vars : 
    events : 
    schedule : 
    scheduleNext : 
    schedulePrevious : 0
    timeout : 15
    
    あなたのクラウド機能がアクティブになり、新しいユーザーが作成されるたびにトリガされます.
    すごい!最初にJavaクラウド関数を展開して実行しました.これは氷山のちょうど先端であり、雲の機能を持つ可能性は無限大です!詳細はAppWriteチームからのクラウド機能のアイデアをお楽しみください.
    あなたがAppWriteまたはAppWriteのフードの下で動作する方法についての詳細を学びたい場合は、我々はちょうどあなたのためにすべてのリソースをキュレーションしている30 Days of Appwrite .

    ✨️ クレジット


    この記事をお楽しみください!このチュートリアルでは、Cloud Functions Demo リポジトリには、様々なランタイムのためのより多くの例があります.我々は貢献を愛し、あなたが私たちを見てopen isuses and ongoing RFCs .
    あなたがどこに立ち往生する場合は、私たちに私たちに手を差し伸べる自由に感じるfriendly support channels 人間によって走る.
    詳細についてはいくつかの便利なリンクを示します.
  • Appwrite Contribution Guide
  • Appwrite Github
  • Appwrite Documentation