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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

1回答

4037閲覧

springでのメール送信でエラー

kachikata96

総合スコア28

Java

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/07/15 08:32

編集2020/07/15 08:35

学習の一環として、eclipse2019.4.14、Java1.8、SpringBoot(2.0.4.RELEASE)、MySQL5.7によるwebアプリの開発を行っております。

現在メールを送る機能を実装するためにとりあえずフォームから入力されたメールアドレスに定型文を送る機能を作っています。

ネットの資料をあさりながら実験としてまっさらなプロジェクトにコードを書いてみるとメールの送信に成功しました。

しかし、本番用のプロジェクトにほぼ同じコードを書いてみるとエラーが起きてしまいました。

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2020-07-15 16:53:41.443 ERROR 12876 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter  : *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of constructor in com.example.demo.service.MailService required a bean of type 'org.springframework.mail.MailSender' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'org.springframework.mail.MailSender' in your configuration.

エラーコードを読むとbeanの登録関係でのエラーのようですが、テストプロジェクトとの違いがわからず原因がはっきりしません。
パッケージの構成の違いでもDI関係のエラーが出ることがあるのでしょうか?

テストプロジェクトでのコード

・コントロールクラス

package com.example.demo.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import com.example.demo.DemoApplication; @Controller public class MailController { @Autowired DemoApplication demo; @GetMapping("/mail") public String getCheckPasswordSending() { //adminWorkSchedule.htmlへ遷移 return "/mailForm"; } @PostMapping("/passwordSending") public String postPasswordSending(@RequestParam("mailaddres")String mailaddres, Model model ) { //パスワードとアドレスをメール送信メソッドに渡す demo.run(mailaddres); return "hello"; } }

・メール送信処理をするサービスクラス

package com.example.demo; import org.springframework.mail.MailSender; import org.springframework.mail.SimpleMailMessage; import org.springframework.stereotype.Service; @Service public class DemoApplication { private final MailSender mailSender; public DemoApplication(MailSender mailSender) { this.mailSender = mailSender; } public void run(String str) { SimpleMailMessage msg = new SimpleMailMessage(); msg.setTo(str); msg.setCc(str); msg.setBcc(str); msg.setSubject("件名"); msg.setText("本文"); // メール送信 mailSender.send(msg); System.out.println(str); } }

・メールフォームのHTML

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <!-- Bootstrapの設定 --> <link th:href="@{/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css}" rel = "stylesheet"></link> <script th:src="@{/webjars/jquery/1.11.1/jquery.min.js}"></script> <script th:src="@{/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js}"></script> <title>パスワード送信画面</title> </head> <body class="text-center"> <h1>パスワードを送信します</h1> <br/> <h2>登録しているメールアドレスを入力してください</h2> <div style="text-align:center"> <form method="post" action="/passwordSending"> <div class="form-group"> <input type="text" name="mailaddres" th:value="${mailadddres_value}"> </div> <button class="btn btn-primary" type="submit" style="padding:10px;"><font size="7">送信</font></button> </form> <br/> </div> </body> </html>

本番用のプロジェクトでのコード

・コントールクラス

package com.example.demo.login.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import com.example.demo.model.Employee; import com.example.demo.service.EmployeeService; import com.example.demo.service.MailService; @Controller public class MailController { @Autowired EmployeeService employeeService; @Autowired MailService mailService; //パスワード送信処理 @PostMapping("/passwordSending") public String postPasswordSending(@RequestParam("mailaddres")String mailaddres, Model model ) { //データベースからパスワードを受け取る Employee employee = employeeService.selectPassword(mailaddres); //Modelに登録 model.addAttribute("password", employee.getPassword()); //パスワードとアドレスをメール送信メソッドに渡す mailService.addresget(mailaddres, employee.getPassword()); //adminWorkSchedule.htmlへ遷移 return "login/checkPasswordSending"; } @GetMapping("/passwordSending") public String getCheckPasswordSending() { //adminWorkSchedule.htmlへ遷移 return "login/passwordSending"; } }

・メール送信処理があるサービスクラス

package com.example.demo.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.MailSender; import org.springframework.mail.SimpleMailMessage; import org.springframework.stereotype.Service; @Service public class MailService { private final MailSender mailSender; public MailService(MailSender mailSender) { this.mailSender = mailSender; } //メール送信メソッド public void addresget(String add,String pass ) { SimpleMailMessage msg = new SimpleMailMessage(); msg.setTo(add); msg.setSubject("件名"); msg.setText(pass); // メール送信 mailSender.send(msg); } }

・入力ホームのHTMLはテストと同じ

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

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

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

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

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

guest

回答1

0

パッケージ構造を確認してください。

controller: com.example.demo.login.controller
service : com.example.demo.service

SpringBootの起動クラスのパッケージは、com.example.demo でしょうか?
SpringBootのデフォルト設定では、起動クラスと同じないしはそのサブパッケージでなければ、Springのアノテーションを付けても対象になりません。

具体的には、SpringBootの起動クラスが、com.example.demo.login.Application だった場合は、Serviceクラスは com.example.demo.login か、そのサブパッケージになければなりません。
(ないしはComponentScanの対象を追加します)

投稿2020/08/03 23:12

A-pZ

総合スコア12011

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問