2014-11-06 59 views
1

發送電子郵件在我的JavaFX項目我注入我的控制器像這樣,這工作得很好:如何通過Spring

@Configuration 
public class AppFactory { 

    @Bean 
    public HomeController homeController() throws IOException { 
     return (HomeController) loadController("/wakiliproject/Home.fxml"); 
    } 

    FXMLLoader loader = null; 

    protected Object loadController(String url) throws IOException { 
     loader = new FXMLLoader(getClass().getResource(url)); 
     loader.load(); 
     return loader.getController(); 
    } 
} 

然而,對於非控制類,我得到一個空指針異常,可能是因爲類永遠不會被注射。說,例如,我嘗試調用在非控制器類的方法從另一個非控制器類,像這樣:

通過Spring發送電子郵件,例如:

public class HomeController extends Application { 

    @Autowired 
    MailMail mailMail; 


    // Send email here 
    public void sendEmailMethod() { 
     System.out.println("Here ----------------------------------------------------------------"); 
     mailMail.sendMail("[email protected]", "[email protected]", "Hello", "Subjecto"); 

    } 

    // The other class methods 

其他類:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="host" value="smtp.gmail.com" /> 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="gmailpassword" /> 
    <property name="javaMailProperties"> 
     <props> 
      <prop key="mail.smtp.auth">true</prop> 
     </props> 
    </property> 
</bean> 

<bean id="mailMail" class="wakiliproject.ServerSide.EMail.MailMail"> 
    <property name="mailSender" ref="mailSender" /> 
</bean> 

-

public class MailMail { 

    private MailSender mailSender; 

    public void setMailSender(MailSender mailSender) { 
     this.mailSender = mailSender; 
    } 

    public void sendMail(String from, String to, String subject, String msg) { 
     //creating message 
     SimpleMailMessage message = new SimpleMailMessage(); 
     message.setFrom(from); 
     message.setTo(to); 
     message.setSubject(subject); 
     message.setText(msg); 
     //sending message 
     mailSender.send(message); 
    } 
} 

堆棧跟蹤:

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894) 
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56) 
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.mail.MailSendException: Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. k10sm2188955lae.42 - gsmtp 
; message exceptions (1) are: 
Failed message 1: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. k10sm2188955lae.42 - gsmtp 

    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:448) 
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:308) 
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:297) 
    at wakiliproject.ServerSide.EMail.MailMail.sendMail(MailMail.java:22) 
    at wakiliproject.HomeController$HomeInit.homeInit(HomeController.java:618) 
    at wakiliproject.HomeController$HomeInit.access$100(HomeController.java:613) 
    at wakiliproject.HomeController.initHomeController(HomeController.java:319) 
    at wakiliproject.WakiliProject.start(WakiliProject.java:34) 
    at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837) 
    at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335) 
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301) 
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) 
    at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) 
    ... 1 more 
Exception running application wakiliproject.WakiliProject 
Java Result: 1 
+1

似乎你有發送郵件配置的問題。你配置了「STARTTLS」嗎? – 2014-11-06 07:43:17

回答

6

有類似的問題......讓我一些嘗試後對其進行配置,就在我的application.properties(我使用的注射JavaMailSender春季)

spring.mail.properties.mail.smtp.starttls.enable=true 
spring.mail.properties.mail.smtp.starttls.required=true 
spring.mail.properties.mail.smtp.auth = true; 
spring.mail.properties.mail.socketFactory.port=587 
spring.mail.properties.mail.socketFactory.class=javax.net.ssl.SSLSocketFactory 
spring.mail.properties.mail.socketFactory.fallback=false 

我需要在測試期間爲我的帳戶啓用更寬鬆的安全性:

「更改您的設置https://www.google.com/settings/security/lesssecureapps,以便您的帳戶不再受Moder保護n安全標準「

或者我有一個驗證錯誤。 我希望這可以幫助

相關問題