おしりんブログ

新人PGおしりんの色々まとめるよブログ

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. talendをインストールしたディレクトリ直下のworkspaceでプロジェクトをclone

  2. プロジェクト内に適当な talend.project と .project を配置 ※1

※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で必要になるのでめもめも。