Springbootでメール送信
こんにちはおしりんです。
花粉症と風邪を併発して死にかけてます。
最近Springbootでメールを送信する機会がありました。
あとから使えるかもなのでめもっときます。
ライブラリ
org.springframework.boot:spring-boot-starter-mail:1.5.9.RELEASE
configファイルのbean設定
SMTPサーバの設定を記述
認証なしサーバの場合
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="localhost" /> <property name="port" value="25" /> </bean>
認証ありサーバの場合(ex:Gmail)
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="smtp.gmail.com" /> <property name="port" value="587" /> <property name="username" value="" /> <property name="password" value="" /> <property name="javaMailProperties"> <props> <prop key="mail.transport.protocol">smtp</prop> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.starttls.enable">true</prop> </props> </property> </bean>
組織アカウントのメールアドレスを使用する場合はusernameに送信元となるメールアドレスと、passwordにメールアドレスに紐づくパスワードをそれぞれ設定。
また、Googleのアカウント情報から「安全性の低いアプリの許可」を有効にする必要がある。
個人アカウントを使用する場合はusernameに送信元となるメールアドレスと、passwordにはアプリパスワードを設定する。
アプリパスワードについては、以下のサイトが分かりやすかったどす。
https://www.ajaxtower.jp/googleaccount/2step-verify/index6.html
実装
@Autowired JavaMailSender javaMailSender; public String sendErrorEmail() { SimpleMailMessage email = new SimpleMailMessage(); email.setTo("to@example.com"); email.setCc("cc@example.com"); email.setSubject("件名"); email.setText("本文"); javaMailSender.send(email); return "result"; }
簡易的なメールを送信する場合はSpringが提供しているSimpleMailMessageクラスを使用する。
そうでない場合(添付ファイルを送りたい、HTML形式にしたい)は、MimeMessageクラスを使用する。
To、Cc、Bccは複数設定可能。その場合は配列で定義する。
Fromは設定してもしなくてもおk。
動作確認
テストはRadishで行いました。
色々試したけどこれがいちばんらくちんでした。
http://radish.jp.brothersoft.com/download/
Radishの使い方は以下のサイトが分かりやすかったどす。
http://lilium.7thheavenblue.com/web_environment/radish/
ありがとうございました。
いじょう!
talendのこねた
2年前にイルカショーに出たことを思い出しました。おしりんです。
イルカかわいかったです。
水族館大好きです。
talendについて忘れがちなことをめも。
gitで管理してるtalendプロジェクトをインポート
※1 上記2つのファイルは新規でtalendプロジェクト作ってできたファイルをコピってもってくればおk。
.project内の<name>タグ内とプロジェクトのディレクトリ名は揃えませう。
別の場所にcloneして、talendスタート画面から既存プロジェクトをインポートしようとするとなんでか失敗する。
talendで準備されてるクラスについて
code\routines\system以下に入ってるクラスはtalendが用意してくれてるクラス。
talendのバージョンによって記述されている内容が異なることがあるので、gitにpushした人のtalendのバージョンと自分のtalendのバージョンが異なると、意図的に修正を加えていない場合でも差分が出る可能性がある。
スキーマ情報取得方法
tInputとかでカラム名を自動で設定したい時はいったんスキーマの情報を取り込む必要がある。
date型の形式が意図しているものと違うことがあるので、違う場合はパターン欄を修正する。
talendまとめ記事少ないから調べるの大変。
自分の設定したコンポーネントの色々があってるか不安なときはJavaのコード見ておかしそうなとこないか確認するのが一番。
セレクトインサートのこねた
そろそろ資格の勉強しなきゃなと思うおしりんです。
開発中のめもをのこします。
またまたMySQL関連のおはなしです。
あるテーブルのデータについて、◯月分のデータはあるけど△月分のデータがない、みたいなときありませんか。
わたしはあります。
そんな時便利なのがセレクトインサート。
テーブル内のデータをコピーして、コピーした分をインサートします。
事例1:Aテーブルの内容をそのままBテーブルにインサート
INSERT INTO B (select * from A);
事例2:Aテーブルの2016年のデータをコピーして、同テーブルに2017年のデータとしてインサート
INSERT INTO A (year, month, 他のカラム…) (select 2017, month, 他のカラム… from A where year = 2016);
月1で必要になるのでめもめも。