読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

Google Cloud Platform(GCP)のチュートリアルに沿ってPostfixからSendGrid経由でメール送信する

久しぶりにSendGridネタです。そして初GCP。

teratailに以下の質問があがってたので、実際に自分でも試してみました。

teratail.com

Google Cloud Platform(GCP)にあるSendGridチュートリアルに関する質問です。チュートリアルはこちらです。

teratailにも書いたのですが、自分の場合はうまくいきました。試したとき、サインアップからスクリーンショット撮っていたので手順をまとめておこうと思います。ただし、チュートリアルの「インスタンス上で Postfix を使用してメールを送信する」部分のみです。このあとにはJavaやNode.jsを利用したメール送信のチュートリアルもあるので、アプリでメール送信する方などは最初からそちらをやるほうが良いかと思います。

チュートリアルだと冒頭は次のようにボタンで遷移できます。
f:id:kikutaro777:20170421163324p:plain
が、このエントリではメニューから選択する流れとしています。(ボタンで一気に遷移してくれるのはありがたいですが、意外とどのメニューを辿っていくのかわからなかったりするため)

ではアカウント作成から淡々と書いていきます。

無料トライアル

https://cloud.google.com/ にアクセスして「無料トライアル」ボタンを押します。
f:id:kikutaro777:20170421113133p:plain

(Googleアカウントでログインしていない状態だと、ここで一回ログイン画面を挟みます)

必要情報を入力します。
f:id:kikutaro777:20170421133341p:plain

f:id:kikutaro777:20170421133405p:plain

クレジットカード情報は必須のようです。
f:id:kikutaro777:20170421155255p:plain

入力に問題がなければ「ようこそ」画面となります。
f:id:kikutaro777:20170421150957p:plain

プロジェクト作成

「プロジェクトを作成」を押します。
f:id:kikutaro777:20170421155523p:plain

プロジェクト名を入力します。私は「SendGridTrial」と付けました。
f:id:kikutaro777:20170421155608p:plain

次のような画面となりました。
f:id:kikutaro777:20170421155654p:plain

Compute Engine

コンピューティングの「Compute Engine」から「VMインスタンス」を選択します。
f:id:kikutaro777:20170421155816p:plain

はじめてだと少し準備に時間かかるようです。
f:id:kikutaro777:20170421162456p:plain

しばらく待つと、「作成」ボタンが有効になりました。
f:id:kikutaro777:20170421163448p:plain

インスタンスの名前を「sendgrid-tutorial」として、ブートディスクの変更をクリックします。
f:id:kikutaro777:20170421214802p:plain

デフォルトがDebianなので、チュートリアル的にはこのままでもよいのですが、CentOS7にしてみました。
f:id:kikutaro777:20170421164803p:plain

作成が完了すると一覧に表示されます。
f:id:kikutaro777:20170421164856p:plain

Cloud Launcher

Cloud Launcherを選択して、検索欄に「SendGrid」を入力します。
f:id:kikutaro777:20170421170019p:plain

「SendGrid Marketing Campaigns」と「SendGrid Email API」が出てきます。SendGrid Email APIを選択します。
f:id:kikutaro777:20170421170116p:plain

Marketing Campaignsというのは機能名称の1つで、SendGridのUI上でメールデザインなどしてキャンペーンメールが送れるものです。先日、自分がハンズオンとかやってましたw
sendgrid.kke.co.jp

ここで「SendGrid Marketing Campaigns」と「SendGrid Email API」の2つの選択肢が分かれているのが少し気になったので、どちらも選んでみたのですが、最終的には同じアカウントでした(^^;GCPではMarketing Campaigns使えるのですねー、ほー。

「無料プランで開始」を押します。
f:id:kikutaro777:20170421173632p:plain

1.Subscribeのプラン「Free($0.00/月)」であることを確認して「登録」を押します。
f:id:kikutaro777:20170421173800p:plain

2.Activateの「SendGridに登録」を押します。
f:id:kikutaro777:20170421174009p:plain

SendGridで作成するアカウント情報入力欄が表示されます。
f:id:kikutaro777:20170421174154p:plain

ユーザ名やパスワード、メールアドレスを入力して「Continue」を押します。
f:id:kikutaro777:20170421174216p:plain

権限に関するリクエストで「許可」します。
f:id:kikutaro777:20170421174232p:plain

これで完了です。
f:id:kikutaro777:20170421174427p:plain

SendGrid

Cloud Launcherに戻ると「Manage API keys on SendGrid website」という表示がありますので、こちらをクリックします。
f:id:kikutaro777:20170421182142p:plain

API Keyというのは、SendGridを利用してメール送信するときの認証情報です。認証ではログイン同様にID/Passwordを指定することもできるのですが、設定ファイルやコードに埋め込むのはセキュリティ上好ましくないです。なので、こちらのAPI Key利用を推奨します。ちなみにチュートリアルのPostfixではAPI keyを使わずID/Passwordを使っているので、ここの手順は飛ばしても大丈夫です。が、SMTPの認証でもAPI Keyは利用できるので(後ほど記述)、このまま進めるほうがよいです。

SendGridの管理コンソール画面が立ち上がり、下のように「Hi xxxx」というダイアログが出ます。
メアドを確認して「Send Confirmation Email」を送ってください。
f:id:kikutaro777:20170421182406p:plain

「Please confirm your email address」というタイトルの確認メールが飛ぶので、以下ボタンを押します。
(メールが来ない場合は、迷惑メールフォルダをチェック)
f:id:kikutaro777:20170421182502p:plain

「Create API Key」を押します。
f:id:kikutaro777:20170421182739p:plain

API Key nameを入れてパーミッションの種類を選びます。今回はとりあえずFullにしてます。
f:id:kikutaro777:20170421203755p:plain

API Keyが表示されます。ここは1回だけの表示で、もう2度と確認できないので、必ずコピーしてください!
f:id:kikutaro777:20170421203925p:plain

これでAPI Keyの作成は終わりです。

Postfixの設定

さきほど作成したVMインスタンスにsshで接続します。
f:id:kikutaro777:20170421210003p:plain

普通のクラウド系だと自分のマシンからssh叩きますが、GCP、ブラウザからいけるんですね。なにこれすごい。
f:id:kikutaro777:20170421212335p:plain

f:id:kikutaro777:20170421212344p:plain

ここからはチュートリアル通りです。

sudo su -
umask 077

で、CentOSなので

yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y

f:id:kikutaro777:20170421212354p:plain
と淡々とチュートリアル通りに進めます。

気を付けるところ、というか、自分の知識が足りなくてちょっとハマったところはSASLパスワードマップ生成の部分で

echo [smtp.sendgrid.net]:2525 [YOUR_SMTP_LOGIN]:[YOUR_SMTP_PASSWORD] >> /etc/postfix/sasl_passwd

最初認証情報は

[kikuta]:[123456789]

みたいに書くのかと勘違いしてずっと認証がとおらなかったですw

この場合だと

echo [smtp.sendgrid.net]:2525 kikuta:123456789 >> /etc/postfix/sasl_passwd

と書けばよいだけでした。

ちなみにAPI Keyを利用する場合は

echo [smtp.sendgrid.net]:2525 apikey:SGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx >> /etc/postfix/sasl_passwd

とすればいけます。

あと、認証間違えてて、次にまたechoコマンドを連続して打ってたのですが、そうするとsasl_passswdのファイル内が

[smtp.sendgrid.net]:2525 [kikuta]:[123456789]
[smtp.sendgrid.net]:2525 kikuta:123456789

みたいになっていて、結局1行目が評価されてダメってなってました。直接いじって

[smtp.sendgrid.net]:2525 kikuta:123456789

とかにして進めば問題なしです。

ちょっと脱線しましたが、再びチュートリアル通りに進めて最後に

echo 'Test passed.' | mail -s Test-Email EMAIL@EXAMPLE.COM

で(最後はもちろん実際の送信先を指定)メール送信。

うまくいけば

tail -n 5 /var/log/maillog

のログは
f:id:kikutaro777:20170421214053p:plain
みたいな感じになります。

メールの受信を確認。
f:id:kikutaro777:20170421213929p:plain

メールをちゃんと届けるためには、Domain Whitelabelの設定などを行ったほうがよいです。

独自ドメイン利用(Whitelabel)および設定時のDNSレコードについて、詳しく教えてください

Postfixは知っておきたいと思ってたので、もうちょっと調べてみないと。

JShellで読み進める「Java本格入門」

4/18に発売された「Java本格入門」を買いました(^^)
f:id:kikutaro777:20170420185548j:plain:w300

発売にあたってのAcroquestさんブログエントリはこちら。
acro-engineer.hatenablog.com


編集の方の「『35歳からのJava再入門』が裏テーマです」が個人的にメッチャ刺さりましたw

ということで、もうすぐ37となる自分ですが…改めて初心に帰って再入門していこうと思います。

で、書籍はJava SE 8が前提なのですが、ふと以下の記事で書かれていた話(REPLツールを使うことにより、Java言語の勉強とかが手軽になる)を思い出して、JShell立ち上げながら読み始めることにしました。

builder.japan.zdnet.com

やり始めると意外と面白いです。自分だけかもしれませんが、歳を取ると、本を買っても(ある程度知っているプログラミング言語だと)ガチで手を動かしてコード書く機会って意外と少なかったりします。Javaの場合は特にIDE立ち上げて、実行して、書き換えて、の繰り返しなので、書籍の最初のほうとか意外と打たないのですよね(^^;

JShell使うと一番最初のHello Java Worldは

public class HelloWorld {
    public static void main(String... args) {
        System.out.println("Hello Java World!");
    }
}

次のように書けるし、コード補完も効くので手軽に試せます。

jshell> System.out.println("Hello Java World!")

JShellの勉強にもなるなーと思ったのが、次のコメントの部分とかで

jshell> //メッセージを表示します

jshell> /*
   ...> このような記号 で囲めば
   ...> 複数行のコメントを記載することもできます
   ...> */

あ、実行できるんだ!って当たり前か(^^;みたいに思ったり。

変数、型、リテラルの辺りも

int numberA; // int型のnumberAという変数を宣言する
numberA = 10; //numberAに10を代入する
System.out.println(numberA); //numberAの値を出力する

と本にはありますが、これをJShellで試していくと

jshell> int numberA
numberA ==> 0

jshell> numberA = 10
numberA ==> 10

jshell> System.out.println(numberA)
10

のようになって、intで宣言した変数で初期値かかないと0が入るのね、とか、ちゃんと代入されてるー、とか確認しながら本を読めて良い感じです。

そして、JShellの書き方がよくわからないときは以下を読めば解決!

最新Java情報局

Javaに再入門しながら、Java 9も触れられるという一石二鳥な感じ。やっぱりJShellいいなぁ。ということで、しばらく写経していこうと思います。

ちなみにJShellでライブラリなどの検証も簡単にできます。以下はSendGridのJavaライブラリを使った例ですが
sendgrid.kke.co.jp
書籍Chapter14辺りのApache Commonsとかでも使えると思います。

というわけで、「Java本格入門」の書籍で再入門しましょう!ちなみに私は紙の書籍で買いましたー。

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで
谷本 心 阪本 雄一郎 岡田 拓也 秋葉 誠 村田 賢一郎
技術評論社
売り上げランキング: 1,824

Java本格入門はKindle版も既に出てます。

4月22日はエバンジェリスト(+乃木坂46)な1日に! #evatfm

今週の土曜(4月22日)は2つのイベントに参加します!!

新エバンジェリスト養成講座 14時~16時
f:id:kikutaro777:20170418191828p:plain

TOKYO FM「エバンジェリストスクール!」 公開収録 17時(予定)
f:id:kikutaro777:20170418230603p:plain
なんと、ラジオ公開収録の抽選に当選しました(^^)!!!

こちらの公開収録は普段パーソナリティを務める乃木坂46の若月佑美さんに加えて、ゲストとして秋元真夏さんが参加されるとのこと!これは楽しみすぎる(>_<;

私のような乃木坂ファンのエンジニアとしては既にワクワクが止まらない感じです。というわけで、当日へのウォームアップアップを兼ねて(なんの?w)ブログを書いてみます。

きっかけ

youtu.be

イベントはどちらも日本マイクロソフトの西脇資哲さん主催です。IT業界ではとても有名な方で、お名前は知りつつも、実際に生でプレゼンを拝見したのは去年のde:code2016が初めてでした。このときの衝撃はブログでめっちゃ書きましたが、感動で一気に惹かれるきっかけとなりました。
kikutaro777.hatenablog.com

Tokyo FMのラジオ「エバンジェリストスクール!」(以降、エバスク)は放送初回から毎週聴いていて、こちらは「乃木坂46の若月さんがラジオパーソナリティをやる」という乃木坂きっかけで知りました。実際にラジオを聴いてみたら、ITやプレゼンなど自分にとってかなり身近なコンテンツで、かつ、実用的な話が多いの、すっかりハマっていました。
kikutaro777.hatenablog.com

そんなこんなで両イベントに申し込みした次第です。

ロマンスのスタート

youtu.be

自分は長らく箱推し*で、特定の推しメンはいませんでした。が、エバスクを聴き始めて、若ちゃんの真面目さ、そしてたまに抜けた感じのチャーミングさにやられ、現在は推しメンとなっています(^^;

*特定のメンバを推さず、グループ全体を推すこと

まさにラジオをきっかけにしたロマンスのスタート

グッズがどんどんと。。。(写真は一部ですw)
f:id:kikutaro777:20170418232748j:plain

まさに「気づいたら片想い」です。
youtu.be

ちなみに人生初のラジオへのハガキ(メールですが)投稿でメッセージを送ったところ、なんと採用されました!エバスクではメッセージが読まれると若ちゃんから直々に役職がもらえる*ということになってまして、私はBotに関する質問をしていたのでボッターなる役職をいただきました。どんな役職だよっ!

*スクールですが会社的な設定になっていて、若ちゃんは専務です。

ちなみになぜBotの質問をしたかというと、ちょうど自分がBotを遊びで作っていたからでしたw 乃木坂ファンというか若月さんファン向けなので是非遊んでみてください。LINEで遊べます。
kikutaro777.hatenablog.com

インフルエンサー

youtu.be

エバスクが始まった当初、Twitterでの(リスナーの)つぶやきは今に比べるとかなり少なかったと思うんですよね。それがいつの間にかトレンド入りが当たり前になってて、今やすごい増えています。当初からラジオとTwitterが連動していて(ちなみにハッシュタグは #evatfm)、毎回、番組公式の @waki_evatfm アカウントがリアルタイムでつぶやいたり、リスナーとコミュニケーションしたり、それが毎回行われるのでドンドンとツイート数が大きくなってます。これを毎週リアルタイムにやるのってかなり大変だと思うんですよね。。こういう所にも感動します。

IT業界で有名な方が乃木坂46のクラスタに飛び込んで大丈夫なのかっ、と最初思ってましたが、全てが超貪欲でライブや舞台、握手会参加(しかも優待枠ではなく全てファンと同じ申し込みっていうw)、楽曲や活動に対する知識、そしてモバメまで。。そのあまりの活動ぶりに乃木坂ファンも「すごい!」となって今や握手など求める方もたくさんいらっしゃるというw

エバンジェリストすごすぎる、影響与えまくりなインフルエンサーですね(^^)

ということで、影響受けた自分はイベントに参加!エバスク公開収録は乃木坂ファンがいるの当たり前ですが、Twitterとかみてると、新エバンジェリスト養成講座のほうも乃木坂ファン率が高そうな気が(^^;;;

そして学生の方々もたくさん参加しそうですよね。若い頃にこういう講座とか参加して、意識的に勉強したり発表するようになったらすごい力がつくと思います。間違いなく、会社入ってからとか社会に出てから役に立つスキルですし。

ということで、2つのイベントに参加して、会場の雰囲気など含めて改めてレポートを書きたいと思います!!!

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村