Javaでメール送信のプログラムがあったんで、メモ。
SMTPの認証とかはせず一番簡単なパターンです。
ケースでいうとサーバーA、サーバーBがあり下記のようなケースです。
A メールサーバー(smtpサーバー)が入っているサーバー
B プログラムがおいてあるサーバーここで定義しているメールアドレスからメールを送りたい
ライブラリ
以下をpomに記述すればOKです。
1 2 3 4 5 |
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.5.4</version> </dependency> |
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/** * メール送信プログラム * * @param toAddress 送信先アドレス * @param title タイトル * @param bodyMessage 本文 */ public void sendMail(String toAddress, String title,String bodyMessage) { Properties props = new Properties(); props.put("mail.smtp.host", "XXX.XXX.XXX.XXX"); //SMTPサーバのアドレス props.put("mail.debug", "true"); //JavaMailのデバッグモード Session session = Session.getDefaultInstance(props, null); MimeMessage msg = new MimeMessage(session); try { //送信先アドレス InternetAddress[] to = {new InternetAddress(toAddress)}; msg.setRecipients(Message.RecipientType.TO, to); //送信元アドレス msg.setFrom(new InternetAddress("hogehoge@mail.com")); //サブジェクト msg.setSubject(title); //本文 msg.setText(bodyMessage); //送信 Transport.send(msg); } catch (AddressException ex) { Logger.getLogger(MailUtility.class.getName()).log(Level.SEVERE, null, ex); } catch (MessagingException ex) { Logger.getLogger(MailUtility.class.getName()).log(Level.SEVERE, null, ex); } } |
参考リンク
問題点
ちなみにこの方法だとAのメールサーバーで定義したアドレスに送るのはできたんですが、XXXXX@gmail.comのような一般のサーバーには送れませんでしたね。
(認証がないせいか554.5.7.1エラーがでます。下記リンク参照)
つまり同一ホストのメールアドレスにはおくれたんですが、一般のメールアドレスには送れませんでした。今回は超限定的な用法だったんでこれでいいんですが、これじゃ意味がないので近いうちに修正したいと思います。