質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

2923閲覧

JavaMailを使用し、jspで入力したメールアドレスにメールを送信したい。

mario11222

総合スコア4

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/10/30 09:21

実現したいこと
画面にメールアドレスを入力し、「送信」ボタンを押下したら、入力したメールアドレスにメール送信をしたい。

詰まっているところ
メール送信メソッドで送信先を設定するところにgetterを使用したが(入力したメールアドレスを設定したいため)コンパイルエラーが起きている

参考にしたURL
https://www.techscore.com/tech/Java/JavaEE/JavaMail/1-2/
https://smtps.jp/docs/integrate/si/javamail/index.html

試したこと
JavaMailを使用したサンプルコードを検索して調べたのですが、宛先のメールアドレスは'xxxxxx@gmail.com'のように
指定されたものばかりで解決できませんでした。

該当のソースコード

javaBeans

1package model; 2 3import java.io.Serializable; 4 5public class OpinionDTO implements Serializable{ 6 private String mail; 7 private String name; 8 private String age; 9 private String main; 10 11 public OpinionDTO() {} 12 13 public OpinionDTO(String mail,String name,String age,String main) { 14 this.mail = mail; 15 this.name = name; 16 this.age = age; 17 this.main = main; 18 } 19 20 public String getMail() { 21 return mail; 22 } 23 24 public void setMail(String mail) { 25 this.mail = mail; 26 } 27 28 public String getName() { 29 return name; 30 } 31 32 public void setName(String name) { 33 this.name = name; 34 } 35 36 public String getAge() { 37 return age; 38 } 39 40 public void setAge(String age) { 41 this.age = age; 42 } 43 44 public String getMain() { 45 return main; 46 } 47 48 public void setMain(String main) { 49 this.main = main; 50 } 51 52 53}

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4<html> 5<head> 6<link rel="stylesheet" type="text/css" href="css/style.css"> 7<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8<title>ご意見・ご要望</title> 9</head> 10<body> 11<h1>ご意見・ご要望について</h1> 12<p>本サイトについてのご意見やご要望等あれば、お気軽にお寄せください。いただいたご意見・ご要望は 13今後のサービス向上に活用させていただきます。</p> 14<p>※必須は記入必須項目です</p> 15<form action="/docoTsubu/Opinion" method="post"> 16お名前:<input type="text" name="name"><B class="Mandatory">※必須</B><br> 17<%--ここで入力したメールアドレスにメール送信をしたい--%> 18メールアドレス:<input type="text" name="mail"><B class="Mandatory">※必須</B><br> 19年齢:<input type="text" name="age"><br> 20ご意見・ご要望<B class="Mandatory">※必須</B><br><br> 21<textarea name="main" rows="4" cols="40"></textarea><br> 22<input type="submit" value="送信"> 23<input type="button" value="戻る" onClick="history.go(-1);"> 24</form> 25 26</body> 27</html>

java

1package model; 2 3import java.util.Properties; 4 5import javax.mail.Message; 6import javax.mail.MessagingException; 7import javax.mail.Session; 8import javax.mail.Transport; 9import javax.mail.internet.InternetAddress; 10import javax.mail.internet.MimeMessage; 11 12public class MailSend{ 13 //メール送信をするメソッド 14 public void send(){ 15 Properties properties = new Properties(); 16 properties.setProperty("mail.smtp.host","localhost"); 17 Session session = Session.getDefaultInstance(properties); 18 19 MimeMessage mimeMessage = new MimeMessage(session); 20 21 OpinionDTO DTO = new OpinionDTO(); 22 //InternetAddressの作成 画面に入力したメールアドレスを設定するためにgetterを使用 23 InternetAddress toAddress = new InternetAddress(DTO.getMail(),"送信者"); 24 25 try { 26 27 //宛先の設定(ここを指定のString型でなく、入力画面に入力したメールアドレスを設定したい) 28 mimeMessage.setRecipient(DTO.getMail(), toAddress); 29 //送信元の設定 30 mimeMessage.setFrom(new InternetAddress("xxxxxxxx@gmail.com")); 31 //サブジェクトの設定 32 mimeMessage.setSubject("ご回答ありがとうございました。"); 33 //本文の設定 34 mimeMessage.setText("貴重なご意見ありがとうございます。今後もユーザーが使いやすいサイトを目指すための参考にさせていただきます。","iso-2022-jp"); 35 //設定の保存 36 mimeMessage.saveChanges(); 37 //メールの送信 38 Transport.send(mimeMessage); 39 }catch(MessagingException e) { 40 e.printStackTrace(); 41 return; 42 } 43} 44 45 46}

servlet

1 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 request.setCharacterEncoding("UTF-8"); 3 String mail = request.getParameter("mail"); 4 String name = request.getParameter("name"); 5 String age = request.getParameter("age"); 6 String main = request.getParameter("main"); 7 8 OpinionDTO opinion = new OpinionDTO(); 9 10 opinion.setMail(mail); 11 opinion.setName(name); 12 opinion.setAge(age); 13 opinion.setMain(main); 14 //データベースに登録する 15 OpinionDAO dao = new OpinionDAO(); 16 OpinionDTO opinion1 = dao.Improvement(opinion); 17 18 //データベースに登録できたら 19 if(opinion1 != null) { 20 HttpSession session = request.getSession(); 21 session.setAttribute("Opinion", opinion); 22 23 //画面に入力したメールアドレスにメール送信をする 24 MailSend mailSend = new MailSend(); 25 mailSend.send(); 26 27 //ご意見承り画面にフォワード 28 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Opinioncomplete.jsp"); 29 dispatcher.forward(request, response); 30 } 31 } 32 33}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2021/10/30 10:24

> コンパイルエラーが起きている そのエラーメッセージをご提示ください。
mario11222

2021/10/31 08:17

みてくださり、ありがとうございます。エラー箇所はソースコード「Java」の mimeMessage.setRecipient(DTO.getMail(), toAddress); で、エラーメッセージは 「処理されない例外の型 UnsupportedEncodingException」です。
jimbe

2021/10/31 08:52

それは「getter によるメールアドレスの指定」とは全く関係無いです。 「UnsupportedEncodingException が発生する可能性があるのでちゃんと try-catch してください」ということです。
mario11222

2021/11/01 12:56

ご回答ありがとうございます。 try-catchしてみます。ただ回答にあるように原因はそれだけではないみたいなので引き続き修正頑張ろうと思います。
guest

回答1

0

コメントでご提示いただいたエラーに関しては、メソッドの使い方を間違っていますので、以下をご確認ください。
MimeMessage#setRecipients()

なお、ご提示いただいたコードの問題は他にあり、「入力を渡していないから取得できない」という事です。

doPost()で入力を設定しているopinionも、それを加工した(と思われる)opinion1も、MailSend#send()には渡されていません。
他からの転送も確認できませんので、当然、入力値を利用できません。

なお、どうすれば良いのかと問われれば、Javaをちゃんと学んで理解してください、と応じざるを得ません。

投稿2021/10/31 12:22

YT0014

総合スコア1750

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mario11222

2021/11/01 13:02

ご回答ありがとうございます。 エラーに関しては指定いただいたものを参照してみます。 それ以外の転送されていないというご指摘もありがとうございます。 「なのでServletであるopinionからMailSendのsendメソッドに値を渡す処理について検討してみます。」 「転送されていない」件については方針はまちがっていないでしょうか?
YT0014

2021/11/02 08:13

>方針はまちがっていないでしょうか? 回答にも記しましたが、正しい方針は「Javaをちゃんと学んで理解」することです。 なお、この仕組みを公開される場合は、同一アドレスへ連続的にメールを送信する迷惑行為が可能なので、運用などは慎重に行ってください。
mario11222

2021/11/03 08:30

分かりました。そうなると解決まで長くなるかもですが頑張ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問