2014年2月15日土曜日

Golang Cafe #16を開催しました。

Golang Cafe #16を開催しました。

今回は、net/mailパッケージとnet/smtpパッケージを使って、メールを送信するサンプルを動かしました。

ソースコードはgithubにありますので、そちらをごらんください。

net/mailパッケージは、主にメールの解析に使います。

例えば、Barry Gibbs <bg@example.com>というサンプルで、mail.ParseAddress()を呼び出すと、
Barry Gibbsとbg@example.comをそれぞれ、メンバに格納するという事をします。メールアドレスの書式がおかしい(例えば、@が2個あるとか。)と、エラーが返り、不正なメールアドレスだということになります。

某携帯キャリアメールのアドレスに"."(ピリオド)が3つとか付いて仕様から外れるメールアドレスがあるということで、確認してみたところ、@の後ろにある場合はエラーになりますが、@の前にある場合は、エラーにはならないようです。

mail.ReadMessage()は、メール本文を読み取ると、メールヘッダ、宛先、BODYなどに分離して格納します。これにより、どんなヘッダがあるか、宛先メールアドレスなどが取得できます。multipartのメールを受信したい場合は、mime/multipartパッケージの関数を使うと、ファイルの解析などもできます。
で、詳細は+Takanobu Haginoさんが、解析されていたので、blogを見たほうがいいかもしれません。

net/smtpパッケージはパッケージ名からわかるようにメールの送信用の関数が定義されています。
smtp.SendMail()を使ってメールを送信するのですが、メールサーバの設定によって、コードを書き換える必要があります。今回のサンプルはGmailを利用してメール送信を実現しましたが、接続しているプロバイダのアドレスを使ってメールを送信する場合や、自前サーバからの送信の場合は、サンプルのままで動作するかどうかはわかりません。
(例えば、pop over smtpのように先にpop3のサーバと認証しておくというシーケンスになる場合など)
Gmailの場合は、認証がありますので、認証用のオブジェクトを生成しておいて、SendMail関数の引数に指定しています。認証が無ければ、nilを指定すれば良いと思います。

最近、Golang Cafe関係のblogの内容が薄い(後日の動作検証などができていない)ので改善しないといけないなと思うものの、VBAと格闘しています…。
ちょっと本格的にがんばろう。