少し前にSendGridへ登録したのですが、結構放置してました(^^;
登録の流れやJavaで送信する簡易プログラムは前のエントリを参照下さい↓
JavaでSendGridを利用したメール送信
sendgrid4j使うとJavaで簡単にSendGrid経由にメール送れるので何か面白いことできないかなぁ、と思ってたのですが、最近遊んでるJavaFXと合わせてみました。
名付けてSendGridFX!(なにそれ
すごい簡単なプログラムですが、JavaFXのHTMLEditorコンポーネントを使って、SendGrid経由でHTMLメールを送る、というものです(^^;それだけ
画面は以下のような感じで、ラベルとテキストとボタン、そしてHTMLEditorだけの超シンプルな構成です。
宛先とタイトルを入れて、メール内容をHTMLEditorで書きます。
HTMLEditorで
- フォント色やサイズ、太字・イタリックに変えたり
- 横罫線入れたり
- 箇条書き(番号つきも)
- センタリングや右寄せ
などなどしてみました。
で、送信!!
受信したメーラ(ThunderBird)でみると(本当はメーラもJavaFXで作ってるとかっこいい気も…)
ちゃんとHTMLメール!!(あたりまえっ
せっかくなので、Yahooメール辺りに送って、JavaFXのWebViewからみてみます(^^;
こんなメールを
送信!
JavaFXでWebViewを置いたアプリでYahooのメールをみてみます。
おおー
やはりJavaFX面白い!そしてSendGridも便利そう!
ちなみにSendGridは前に一緒に仕事していた後輩がSendGrid社とパートナーになって最近力を入れていますので興味ある方は是非彼に!ブログも始めたらしい(^^↓
プログラム
NetBeans7.4からJavaFXプロジェクトをMavenで作れるようになったので、sendgrid4jもpom.xmlに
リポジトリと
<repositories>
<repository>
<id>jp.co.flect</id>
<name>FLECT maven repository</name>
<url>http://flect.github.io/maven-repo/</url>
</repository>
</repositories>
依存性を書けばOKですね。
<dependencies>
<dependency>
<groupId>jp.co.flect</groupId>
<artifactId>sendgrid4j</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
Maven使えるとやはり楽w
コードはこんなレベルです(^^;JavaFXのコントローラだけですが
package jp.co.hoge.sendgridfx;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.web.HTMLEditor;
import jp.co.flect.sendgrid.SendGridClient;
import jp.co.flect.sendgrid.SendGridException;
import jp.co.flect.sendgrid.model.WebMail;
public class SendGridFXController implements Initializable {
private static final String SMTP_AUTH_USER = "hogehoge";
private static final String SMTP_AUTH_PWD = "hogehoge";
private static final String MAIL_FROM = "kiku@test.com";
private static final String MAIL_FROM_NAME = "キクタローテスト";
SendGridClient client;
@FXML
private HTMLEditor editor;
@FXML
private TextField textTo;
@FXML
private TextField textTitle;
@FXML
private Label message;
@FXML
private void sendButtonAction(ActionEvent event) {
try {
WebMail mail = new WebMail();
mail.setFrom(MAIL_FROM);
mail.setFromName(MAIL_FROM_NAME);
mail.setTo(textTo.getText());
mail.setSubject(textTitle.getText());
mail.setHtml(editor.getHtmlText());
client.mail(mail);
message.setText("メールの送信に成功しました。");
} catch (IOException | SendGridException ex) {
message.setText("メールの送信に失敗しました。");
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
client = new SendGridClient(SMTP_AUTH_USER, SMTP_AUTH_PWD);
}
}
簡単なメール送信するだけなら、こんなレベルで作れます(^^;
ちなみにJDK8で作っていたのですが、HTMLEditorを使うと実行時に以下のエラーで落ちました…。
Exception in Application start method
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1959)
at com.sun.javafx.scene.web.skin.HTMLEditorSkin$15$1.updateItem(HTMLEditorSkin.java:699)
at com.sun.javafx.scene.web.skin.HTMLEditorSkin$15$1.updateItem(HTMLEditorSkin.java:694)
at javafx.scene.control.ListCell.updateItem(ListCell.java:442)
at javafx.scene.control.ListCell.indexChanged(ListCell.java:320)
at javafx.scene.control.IndexedCell.updateIndex(IndexedCell.java:115)
at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1730)
at com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1627)
//略
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:491)
//略
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:868)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:55)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:157)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1959)
at com.sun.javafx.scene.web.skin.HTMLEditorSkin$15$1.updateItem(HTMLEditorSkin.java:699)
at com.sun.javafx.scene.web.skin.HTMLEditorSkin$15$1.updateItem(HTMLEditorSkin.java:694)
at javafx.scene.control.ListCell.updateItem(ListCell.java:442)
//略
at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:101)
... 1 more
Exception running application jp.co.hoge.sendgridfx.MainApp
JDKというよりmavenまわりなのかな(^^;JDK7にしたら動いたので、とりあえず今回のサンプルはNetBeans7.4とJDK7で作りました。