職業訓練覚え書き

39日目(MySQL7)

メール送信

利用シーン

 ー受付、登録、システム障害等の通知メール

 

送信

 ーSMTPサーバ

受信

 ーPOPサーバ、IMAPサーバ

※訓練ではSMTPサーバに依頼するところまで

 

Javaのメール機能を利用するにはライブラリファイルが2つ必要

  • CommonsEmail
  • JavaMail

 


基本設定手順

  1. SimpleEmailオブジェクトに設定
  2. 送信者、受信者の指定
  3. 件名、本文の設定
  4. 送信

 

①SimpleEmailオブジェクトを利用し、メソッドで設定を行う。
 

SimpleEmail email = new SimpleEmail();

送信サーバ
 例:gmail
 email.setHostName("smtp.gmail.com");

START TLS
 email.setStartTLSEnabled(true);

SSL用送信ポートの指定
 email.setSslSmtpPort("465");

認証
 email.setAuthentication("ユーザ名@gmail.com", "パスワード");

Gmailの場合、アカウントの
セキュリティの「安全性の低いアプリのアクセスを許可する」というオプシ
ョンをオンにする

かつ、アカウントの使用に心当たりがあるか聞かれるのでそれも心当たりあ
ると答えるとメール送信できる
(授業中にはまった)

 

②送信者、受信者の設定(どちらも2通り書き方がある)

 

送信者

 email.setFrom("アドレス");

 email.setFrom("アドレス", "表示名", "ISO-2022-JP")

受信者

 email.addTo("アドレス");

 email.addTo("アドレス", "表示名", "ISO-2022-JP");

 

※受信者の設定は以下の3パターンある

  • addTo
  • addCc
  • addBcc

 

③件名、本文

 

文字化け防止

 email.setCharset("ISO-2022-JP");

件名

 email.setSubject("こんにちは");

本文

 email.setMsg("このメールは\nJavaから送信しました");

 

④送信

 

 email.send();

 

ここまで授業でやってて、見本のサーブレットをコピペして流用していたところ、@WebServletのURLを変更し忘れていたためTomcatが始動しないという状況にはまる

 

ローカルサーバーのアクセス失敗?とエラーのポップアップであたふたし、
重大:A child container failed during startでググってサーバーをクリーンしたりしても解決せず、
server.xml内のdocBace属性に存在しないパスを入れてるのか?と思ったけど、存在してるよね?と二度見三度見。

 

結果的に
こちらのブログ記事でようやく解決。
http://kenichia.hatenablog.com/entry/2016/06/26/120308

ありがたや。

 

サーブレットでコピペして開発するとこういう罠があるらしい。

同じ@WebServletのサーブレットが複数あると、「A child container failed during start」のエラーが出て今回のような事態になる。

ググる大事さを知った一日。


あとは自習時間で、これまでの振り返り。

 

ハマった時には、エラーメッセージもそうだけど「何をやったらその現象が起きたのか?」を洗い出すのもいいかもしれない。

そのためにタスクを書き出して、それからコードの記述に入ったほうが今回みたいな時にリカバリーしやすいかも