まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:mail

Google Apps(無料版)を使って所有するドメインのメール環境を続けてきましたが、無料期間が終了することになり、メールアカウントを残すにはメールサーバー環境を引っ越す必要が生じました。

先日、このブログで Zoho メールで独自ドメインメールを無料運用するための手順を紹介しました。これは1つの解決策ではありますが、5ユーザーまでとか、添付ファイルは最大25MBとか、これまでの環境からの移行としては少し制約の大きなものでもありました(無料、という非常に大きな魅力はありますけど)。
http://dotnsf.blog.jp/archives/1080247716.html

2022030501



ただこの Zoho メールを使う方法には隠れた制約がありました。手順内でも紹介しているのですが、独自ドメインメール環境を申請するためには、その独自ドメインではないメールアドレスを使ってアカウントを作成する必要があり、そのメールアドレスは他のドメインのメール環境には使えないのでした。つまりドメインを複数所有していて、その複数のドメインを全て Zoho メール(無料版)に移行するには同じ数のメールアドレスが必要でした。これは無料メールアカウントを複数発行すればできなくはないのですが、管理対象のメールアドレスが増えるだけでなく、どのメールアドレスをどのドメインの申請に使ったかを把握しておく必要も生じてしまい、色々面倒な運用になってしまいそうでした。


この状況を避けるべく、(無料ではないが)格安で独自ドメインのメール環境を用意してくれる環境を用意することにしました。その例として今回申し込んだのはさくらインターネット様の「さくらのメールボックス」サービスです:
https://rs.sakura.ad.jp/mail/

2022032500



サービス内容はこんな感じです:
・独自ドメインを20個まで利用可※
・メールアドレス数は無制限※
・容量は(全ユーザーの合計で)20GB
・1年間で 1048 円(2週間の無料お試し可)


※異なるドメインの同じ名前のユーザー(例えば admin@domain1.com と admin@domain2.net)のメールアドレスを別々に作ることはできず、いずれのアドレス宛のメールも同じメールボックスに届きます。


データ容量自体は全ユーザーの合計で 20GB と、Zoho メール(1ユーザーあたり 5GB で、5ユーザーまで)と比べても小さいのですが、独自ドメインを 20 個まで登録できることに加え、メールアドレスを無制限に持てるというアドバンテージがあります(ユーザーあたりのメール容量があまり大きくないケースであればこちらのほうが向いている可能性があります)。また価格も個人利用と考えても決して高くはなく、このくらいならお小遣いでなんとか・・・ というレベルだと思っています。

今回、これまで Google Apps でメール運用してきた所有ドメインの1つ(welove.bz)をさくらのメールボックス環境に移行してみたので、その手順を記録として残しました。他のドメイン※も同様に移行するつもりですが、その内容を以下に公開します。なお以下の作業は「 Google Apps からの移行」に特化した内容はほぼなくて(現在どこで運用してるとかしてないとかに関係なくて)、単に「さくらのメールボックスで独自ドメインのメールを運用するための設定」の紹介となります。


※ドメイン管理を移管する場合、「さくらのインターネット」へのドメイン移管ができるのは .com, .net, .org, .info, .biz, .tokyo, .mobi のみのようです。今回はドメインの移管をせずに DNS の設定だけで実施する方法を紹介します:
https://help.sakura.ad.jp/206205811/#trouble01



【「さくらのメールボックス」と契約】
契約手続きそのものを詳しく紹介するつもりはありませんが、何はともあれ「さくらのメールボックス」と契約する必要があります。上述のページから「2週間無料ではじめる」と書かれたリンクをクリックして契約内容を入力していきます。クレジットカードが必要ですが、特に難しいことはないと思います:
2022032501


契約が完了すると、さくらインターネットの会員メニューにログインできるようになり、「契約中のサービス一覧」に「さくらのメールボックス」が表示されるようになります。この時点ではまだ独自ドメインの設定はできていませんが、初期ドメインと呼ばれる *****.sakura.ne.jp という値が付与されます。この値は後で DNS 設定時に使うので覚えておきましょう。

この「コントロールパネルを開く」と書かれたボタンをクリックして独自ドメインを含むメールボックスの設定画面に移動します:
2022032502


サーバコントロールパネルというサーバーの設定変更画面にログインします。契約時に送付されたドメイン名とパスワードを入力して「ログイン」ボタンをクリックします:
2022032503


ログインに成功すると以下のような「サーバコントロールパネル ホーム」画面が表示されます。ここから独自ドメインを利用するための設定を行っていきます:
2022032504


以下では自分が所有していて、Google Apps で運用していた "welove.bz" というドメインのメール環境を移行する様子を紹介します。なお、このドメイン自体は GoDaddy.com で取得したものです。他のドメインプロバイダーを使っている場合は一部異なる設定内容が含まれると思いますのでご了承ください。


【「さくらのメールボックス」で独自ドメイン利用の設定】
改めて「さくらのメールボックス」のコントロールパネルを使って独自ドメインのメール環境を構築します。今回は自分が取得している独自ドメイン(welove.bz)のメールサーバー環境を構築する様子を紹介します。

画面左のメニューから「ドメイン/SSL」 - 「ドメイン/SSL」 を選択します:
2022032501


ドメイン/SSL の設定画面になり、現在までに登録されているメールのドメイン(デフォルトの1つ)が表示されています。ここで「ドメイン新規追加」をクリックします:
2022032502


「ドメインの新規追加」画面に切り替わります。追加するドメインの指定方法によっていくつかの選択肢が用意されていますが、(これから取得して追加するのではなく)すでに取得済みのドメインを追加する場合は画面下にスクロールします:
2022032503


ドメインの管理そのものを移管する場合は「他社で取得したドメインを移管して使う」から先に進むことになりますが、今回はドメイン管理をそのままにして、メールサーバーの設定のみを行います※。というわけで一番下までスクロールして「他社で取得したドメインを移管せずに使う」の「追加」をクリックします:
2022032901


※上の画面にも書かれていますが、このオプションはさくらのブログでの動作を保証していないようです。


次の画面ではメールサーバーで移管するドメイン(下図では "welove.bz")を指定して「追加」します。ネームサーバーについて云々・・・と書かれていますが、今回ネームサーバーを現行のものから変更するつもりはないので、ここは無視します:
2022032902


するとドメイン/SSL の画面に戻り、指定したドメインが追加されていることを確認します:
2022032903


さくらのメールボックス側で必要な作業は以上です。続けてドメインを管理しているプロバイダー側での DNS 設定画面で変更作業を行います。



【「さくらのメールボックス」向けの DNS 設定変更】
対象ドメインの DNS 変更を行います。自分の場合、対象ドメイン(welove.bz)を GoDaddy.com で取得&管理しているので、以下は GoDaddy.com での作業イメージとなります。が、他のプロバイダーでも同様の作業を行えばよいだけなので、以下のスクリーンショットを参考に同様の作業を行ってください。

具体的には対象ドメインの MX レコードを編集します。またメールサーバーを mail.welove.bz のような名称にしたい場合は合わせて CNAME レコードも編集します。 というわけで、対象ドメインの DNS 管理画面に移動します:
2022032901


まずは MX レコードを以下のように変更(または追加)します。これ以外の MX レコードが存在していたら併せて削除します:
ホスト名: (対象ドメイン名)
TYPE: MX
VALUE: xxxxx.sakura.ne.jp(初期ドメイン名)
状態: 有効
優先度: 10 (など、適当な値)
2022032901


また単にさくらのメールボックス機能を使うだけでなく、メールサーバーに mail.welove.bz という名前をつけて管理したい場合は以下の CNAME レコードも追加します。なお、これをやっておくとウェブメール以外の(POP3/IMAP/SMTP などの)メーラーを使う際のメールサーバーを "mail.welove.bz" などと指定できるようになります:
ホスト名: mail  (メールサーバーを mail.対象ドメイン名 にしたい場合)
TYPE: CNAME
VALUE: xxxxx.sakura.ne.jp(初期ドメイン名)
状態: 有効
2022032902


これで DNS の設定も終わりです。スクリーンショットは GoDaddy.com のものでしたが、他のプロバイダーを使っている場合も同様の作業をすればいいはず。

あとはしばらく(TTL次第ですが、おそらく数分)待てば指定したドメインのメール環境が整います。すでにさくらのメールボックスにユーザーの登録が済んでいればすぐに使えるようになりますが、まだの場合はユーザーを登録します。


【「さくらのメールボックス」へのユーザー追加】
さくらインターネットのサーバーコントロールパネルに戻ります。今回はメールのユーザーを指定するので「メール」メニューを選択してメールアドレスの一覧を表示し、「新規追加」ボタンをクリックします:
2022032901


新規に登録するユーザーの情報を入力します「ユーザ名」と書かれた部分がメールアドレスの @ の左にくる部分となります。また「パスワード」も必須情報です:
2022032902


全ての情報が入力できたら画面下の「作成する」ボタンをクリックします:
2022032903


メールアドレス一覧画面に戻ります。作成したユーザーが追加されていることを確認します:
2022032904


【「さくらのメールボックス」のウェブメールを使う】
ドメイン側の設定変更が済んでいればウェブメールを使うことができるようになります。ウェブメールを使うには以下の URL にアクセスします:
https://secure.sakura.ad.jp/rscontrol/?webmail=1


認証を聞かれるのでメールアドレスと(作成時に指定した)パスワードを入力してログインします:
2022032901


ウェブのメール画面が開きます。この画面を使って受信メールを確認したり、送信・返信が可能です:
2022032902


なお、さくらのメールボックスでウェブメールを使う場合はこちらのドキュメントも参照ください:
https://rs.sakura.ad.jp/function/webmail/

またウェブメール以外の各種メーラーやその設定についてはこちらを参照ください:
https://help.sakura.ad.jp/mail/



同様にして(プラン容量内であれば)更にドメインを追加したり、ユーザーを追加して使うこともできます。ドメインの移管をしない場合は、現行のドメインプロバイダーによって DNS の設定方法が異なるため、画面とかは用意できないのですが、ちょっとした手間をかけるだけで実現できるはずです。また Cloudflare などのドメインレベルでのファイアウォールを使っている場合だとメールのためにドメインの移管をするわけにもいかない(この影響がデカい)ので、この方法のほうがより柔軟性高く実現できると思っています。



Google Apps の無料運用が終わることになり、これまで運用してきた独自ドメインのメールアカウントをどこかへ移行する必要が生じました。

いくつかの移行先候補の中で、「無料で」続けることができる数少ない選択肢が Zoho メール だと思っています。というわけで、Google Apps からの移行を視野に入れて、Zoho メールで独自ドメインのメールアカウントを運用する方法を調べました(ちなみに以下のスクリーンショットを撮った時には FireFox を使っています):
2022030500


【Zoho メールとは】
個人や小規模組織を対象に無料のメール環境を提供しています。GMail 同様、個人でも @zohomail.jp ドメインのメールアカウントを取得することもできますが、今回は独自ドメインでメールを運用できる点に絞って紹介します。なお無料で Zoho の独自ドメインメールを運用する場合の条件は以下のようになります:
・最大5ユーザー
・1ユーザーあたり 5GB のメール容量
・添付ファイルは最大 25MB まで
・Webメールとモバイルアプリのみ(POP3/IMAPなし)



【Zoho メールを独自ドメインで利用するまでの手順】
以下に実際に自分が所有しているドメイン(yellowmix.net)で利用できるようにするまでの手続きの様子を紹介します。Zoho は Zoho Japan が日本人向けのサービスも提供していますが、この Zoho メールの手続きは途中から英語のみになるので、その点にご注意ください。

まずは Zoho メールのトップページへ行き、「広告表示なしメールの使用を開始する」と書かれた箇所で「メールアドレス」を選んで「無料プランに登録する」ボタンを選択します:
2022030501


※ちなみにここで「個人向け」を選ぶと、@zohomail.jp ドメインの無料メールアカウントを取得できます。

このような画面が表示されます。この辺りは有料サービスなので下にスクロールします:
2022030502


「永久に無料のプラン」と書かれたサービスの「無料お試し登録」をクリックします:
2022030503


次の画面では新たに申し込むアカウントの設定に利用する氏名とメールアドレス(今回申し込むメールアドレスのドメインとは別のもの)、そしてパスワードを入力します(既にそのメールアドレスで Zoho のアカウントを取得している場合はログインします)。最後に「登録する」ボタンをクリックします:
2022030501


Zoho メールの設定ウィザードがスタートします。まずはドメインを追加します。今回は既に所有済みのドメインを利用するため「既存のドメインを追加する」「今すぐ追加する」ボタンをクリックします:
2022030502


以下のようなダイアログが表示されるので、登録するドメイン名(www. が表示されているので、そこに続けてドメイン名を入力)、組織名、そして組織の分類(自分は IT を選びました)を指定して「追加する」を選択します:
2022030503


すると次のような画面になり、ドメインの追加ができました。ただ本当にこのドメインを所有しているかどうかを確認する必要があります。続けて「ドメイン認証に進む」をクリックします:
2022030501


ドメインの所有権を認証する画面が表示されます。ここから先はドメインを取得したプロバイダーによって作業内容が変わると思いますが、自分の場合は GoDaddy.com でこのドメインを取得しており、GoDaddy.com の場合は左の「自分の DNS にログインする」を選ぶことで先にすすめることができました。以下、この方法を選んだ場合として説明を続けます:
2022030501


「自分の DNS にログインする」を選択すると DNS プロバイダー(自分の場合は GoDaddy.com)へのログイン認証が行われるので、該当プロバイダーへログインする ID とパスワードを入力してサインインします:
2022030502


正しくサインインできると、Zoho Mail Hosting を有効にする許可を与えるかどうかの確認画面になります。内容を確認して「接続」をクリックします:
2022030503


すると元の画面に戻り、「ドメインの所有者が確認されました」のメッセージが表示されます。これで指定したドメインを本当に自分が取得していることを証明できました。

続けてこのドメインでのユーザーを作成します。

"Your login mail address" と書かれたテキストフィールドに作成するメールアドレスを入力(@yellowmix.net は入力済みなので、その前の部分を入力)して、「作成する」をクリックします:
2022030501


すると以下のような画面が表示され、ユーザーが追加されたことが確認できます。必要に応じてここで「追加する」を選択して、このドメインのメールユーザーを(無料プランであれば最大5ユーザーまで)追加できます。ユーザーの追加が完了したら「グループの設定に進む」をクリックします:
2022030501


グループはユーザーが共有して利用することができるメールアドレスです。必要に応じて「作成する」からグループを作成してください(不要であれば作る必要はありません)。次に進む場合は「DNSの関連付けに進む」をクリックします:
2022030502


次に MX レコードなどのメール用 DNS 設定を行います。が、この前の手続きでドメイン認証が済んでいれば「MX、SPF、DKIM を自動で設定できます」ボタンをクリックするだけです:
2022030503


続いてデータ移行の画面になります。既存メール環境からのデータ移行ができるようですが、今回の自分の場合は新規のメール環境登録なので既存メール環境がありません。ここは何もせずに次の「モバイル設定に進む」を選択しました。ここは実際に試した人からの情報があればいただきたいです:
2022030501


スマホからこのメールを使うための設定画面です。といっても実際にはモバイルアプリへのリンクがあるだけのページでした。必要であればこのページのリンクから Zoho メールのモバイルアプリをダウンロード&インストールしてください。最後に「設定の完了に進む」をクリックします:
2022030502


※上のリンクをクリックするとこのような画面になって、モバイルアプリのダウンロードができるようです:
2022030503


これで全ての設定が完了しました。「受信トレイを確認してください」をクリックします:
2022030501


新しいメール環境が確認できるようになりました。が、改めて最初からのアクセス方法を確認するため、一旦ログアウトしましょう。右上のアイコンをクリックします:
2022030502


そして「サインアウトする」を選択して、サインアウトします:
2022030503



では改めて Zoho メールに作成した独自ドメインのユーザーでログインしてメールを使ってみます。まずは Zoho メールのトップページにアクセスします:
https://www.zoho.com/jp/mail/


そして右上の「サインイン」をクリックします:
2022030501


先程登録した独自ドメインのユーザー名とパスワードでサインインします:
2022030502


初回ログイン時には2段階認証を有効にするよう注意画面が表示されます。必要に応じてここで2段階認証を有効にしてください(後から設定することも可能です)。ここでは一旦「後で確認する」をクリックして先に進みます:
2022030501


これで Zoho メールを送受信できる画面に移動できました!安全のため2段階認証も有効にしておきましょう:
2022030501



以上、独自ドメインを Zoho メールで運用する場合の設定手順を紹介しました。1ドメインあたり5ユーザーまで、というのが個人的にはちと厳しい気もするのですが、Google Apps 亡き今となっては無料で独自ドメインメール運用ができる環境の選択肢そのものが少なく、無料となると(格安のはいくつかありますが)個人的にはここしか知りません。この5ユーザーの範囲内でうまく使っていけると、Google Apps 難民にとっても有用な移行先であるように思えました。


メール送信(送信だけじゃないけど)サービスの最大手と思われる SendGrid を使う機会がありました。SDK や API を使って、メールを送信できるサービスです。
2016090601


メール送信そのものは(sendmail などを使えば)単純に実現できますが、一度に大量のメールを送る場合や迷惑メール対策など、本格的に使おうとすると色々な面倒が待っています。そういう面倒な所を一手に引き受けて、心配なくメール送信が実現できる、というサービスです。

この SendGrid によるメール送信ですが、ダッシュボード画面から目的の相手にインタラクティブに送信するだけではなく、プログラミングのためのインターフェースが公開されているので、自分の作るアプリケーションから利用することもできます。ただ実際に送信するサンプルを Java でググると、多くの場合 SDK を使ったものが見つかります。自分は SDK ではなく Web API(REST API) での実現を考えていたので挑戦してみました。ウェブ上にあまり資料がなかったこともあって、その手順を以下に紹介します。


まず最初に大事なこと。SendGrid Web API の最新バージョンは V3 ですが、V2 を使います。SendGrid の推奨でもあります:
https://support.sendgrid.kke.co.jp/hc/ja/articles/206231901-Web API v2とv3どちらを利用すべきでしょうか?-


というわけで、Web API V2 の Mail API を使って実装することにします。リファレンスはこちらです:
https://sendgrid.kke.co.jp/docs/API_Reference/Web_API/mail.html


これを読むと、「メールを送信して結果を JSON で受け取る」場合は以下の様な REST API を実行することになります(これは curl コマンドで実行する場合の例):
$ curl -X POST https://api.sendgrid.com/api/mail.send.json -H 'Authorization:Bearer SG.*****' -d 'to=user1@recipient.com&subject=abcd&from=info@from.com&html=<b>ハロー</b>、ワールド'

上記コマンドは info@from.com ユーザーから user1@recipient.com ユーザーへ、メールサブジェクトは "abcd" 、本文は HTML で "<b>ハロー</b>、ワールド"(HTML として送信しているので、ハローだけが太字になります)を送信する場合のコマンドになります。 user1@recipient.com は送信先なので実在している必要がありますが、送信アドレスである info@from.com は実在している必要はありません。またヘッダの認証情報として使っている SG. で始まる文字列は SendGrid から取得した api key です。SendGrid のアカウントをお持ちで、まだ api key を取得していない場合、取得方法についてはこちらを参照してください。

上記 curl コマンドは(入力ミスなどがなければ)正しく実行されて、メールも送信されるはずです。つまり正しいコマンドです。これを REST API と見なして、同じ処理を Java で実装しなおせばいいわけですが、これが意外と手間取りました。

まず最初に、普段使っている Jakarta Commons HTTP Client 3.1 (メンテナンスモード)を使って、こんなコードを書いてみました(あらかじめ書いておきますが、以下のコードでは期待通りに動きません):
  :
public int sendMail( String to, String subject, String html ){
  int r = 0;

  try{
    String data = "to=" + to + "&from=info@from.com&subject=" + subject + "&html=" + html;
    PostMethod method = new PostMethod( "https://api.sendgrid.com/api/mail.send.json" );
    method.setRequestHeader( "Authorization", "Bearer SG.*****" );
    method.setRequestBody( data );
    HttpClient client = new HttpClient();
    int sc = client.executeMethod( method );
    String json = method.getResponseBodyAsString();
      :
r = 1; }catch( Exception e ){ mothod.setRequest e.printStackTrace();
r = -1; } return r; } :

オプションで指定している内容は curl コマンドのものと同じです(例えば Content-Type ヘッダを指定していませんが、curl でも指定せずに動いていたので)。ただこの sendMail 関数を to = user1@recipient.com, subject =  abcd, html = <b>ハロー</b>、ワールド というパラメータで実行した場合、ステータスコード(上記コード内の sc 変数)の値は 400 となり、また実行結果である json 変数の値は以下のようなものになりました:
{"errors":["Empty from email address (required)"],"message":"error"}

「必須項目である from 値が空である」というエラーメッセージのように見えます。しかしその値は上記のようにハードコーディングで入力しているつもりでした。

これまでも HTTP Client を Java で実装する場合はこの HTTPClient 3.x を使うことが多かったし、今回のようなポスト時のエラーに遭遇したことはなかったのですが・・・ まずここで躓きました。


次に試したのはポスト方法の変更です。sendMail 関数を以下の様な形に変え、ポストデータをプレーンテキストで送信するのではなく NameValuePair 配列で送信するように変更してみました(これもまだ期待通りには動きません):
  :
public int sendMail( String to, String subject, String html ){
  int r = 0;

  try{
    PostMethod method = new PostMethod( "https://api.sendgrid.com/api/mail.send.json" );
    method.setRequestHeader( "Authorization", "Bearer SG.*****" );
    List<namevaluepair> params = new ArrayList<namevaluepair>();
    params.add( new NameValuePair( "to", to ) );
    params.add( new NameValuePair( "from", "info@from.com" ) );
    params.add( new NameValuePair( "subject", subject ) );
    params.add( new NameValuePair( "html", html ) );
    method.setRequestBody( ( NameValuePair[] )params.toArray( new NameValuePair[0] ) );
    HttpClient client = new HttpClient();
    int sc = client.executeMethod( method );
    String json = method.getResponseBodyAsString();
      :
    r = 1;
  }catch( Exception e ){
    mothod.setRequest
    e.printStackTrace();
    r = -1;
  }

  return r;
}
  :

自分としては先程のコードと同じことを記載しているつもりでした。が、このコードは一応動いて、ステータスコードは 200 (成功)を返してくれます。

しかし、実際に送られてくるメールを受け取ると、残念ながら日本語部分が全て ? という文字に化けてしまっていました。。
2016090601
 (↑ ハロー、ワールド という結果を期待していたが文字化け)


文字化けということは文字コードの指定と実際の文字コードが違っていると読み、であれば強制的に UTF-8 で指定すれば・・・ と考えたのですが、この HTTPClient 3.1 には Content-Type で指定する以外の文字コード指定方法はありません( NameValuePair 配列で指定した本文がどのような内部処理をされているのかはわかりません。。) というわけで、この方法も詰み・・・

結論として、HTTPClient のバージョンをより新しいものに上げて対処しました。現在の最新バージョンは 4.5.2 のようです(僕は 4.5.1 を使いました):
https://hc.apache.org/httpcomponents-client-ga/

このライブラリに置き換えた上で、コードも以下のように 4.5.x 仕様に書き換えました(完成版です):
  :
public int sendMail( String to, String subject, String html ){
  int r = 0;

  try{
    PostMethod method = new PostMethod( "https://api.sendgrid.com/api/mail.send.json" );
    method.setRequestHeader( "Authorization", "Bearer SG.*****" );
    List<namevaluepair> params = new ArrayList<namevaluepair>();
    params.add( new BasicNameValuePair( "to", to ) );
    params.add( new BasicNameValuePair( "from", "info@from.com" ) );
    params.add( new BasicNameValuePair( "subject", subject ) );
    params.add( new BasicNameValuePair( "html", html ) );
    method.setEntity( new UrlEncodedFormEntity( params, "UTF-8" ) );
    CloseableHttpClient client = HttpClients.createDefault();
    CloseableHttpResponse response = client.execute( method );
    int sc = response.getStatusLine().getStatusCode();
    HttpEntity entity = response.getEntity();
    String json = EntityUtils.toString( entity, StandardCharsets.UTF_8 );
      :
    r = 1;
  }catch( Exception e ){
    mothod.setRequest
    e.printStackTrace();
    r = -1;
  }

  return r;
}
  :

この関数は期待通りに動き、実行後にメールを受け取ると、期待通りの HTML コンテンツが文字化けなしに表示されました:
2016090602


と、偉そうに書きましたが、実の所、なぜ前の2つのコードで動かないのかわかりません。最新コードでは NameValuePair 配列を UTF-8 指定で追加していて、これは旧バージョンにはない関数なので、その差で文字化けの有無になっているのかもしれません。ただ繰り返しますが、curl では最小限の指定だけで動いていたことと同じ指定をしているのに、Java でうまく動かない理由が説明できないのでした(少なくともエラーメッセージの内容をそのまま信用して対処しようとするとハマりそうな予感・・・)。

まあとりあえずは結果オーライ、ということで。あと SendGrid のメール送信を Java から、それも SDK ではなく Web API 経由で送る例はあまり見かけることがなかったので、後からやる人の助けになれば嬉しいです。


このページのトップヘ