首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在IDE外部使用Java mail发送邮件

如何在IDE外部使用Java mail发送邮件
EN

Stack Overflow用户
提问于 2018-09-13 22:38:36
回答 2查看 709关注 0票数 1

我试图在我的JavaFX应用程序中发送一封电子邮件,一切工作正常,电子邮件被发送到Reciepent,当我在集成开发环境( Intelij )中运行它时,我没有得到任何异常和错误,但当我在Intelij之外运行应用程序时,它不工作。我制作了一个简单的注册表,将字段中的数据保存到我的数据库中:

代码语言:javascript
复制
String username;
String password;
String email;
Random rd = new Random();
int ID;
public void registerUser(javafx.event.ActionEvent ab) {
     username = textUser.getText();
     password = textPass.getText();
     email = textEmail.getText();

    ID = rd.nextInt(999999999);
    Connection connectt = null;


    try {

        Class.forName("org.sqlite.JDBC");
        connectt = DriverManager.getConnection("jdbc:sqlite:C:\\Users\\barte\\OneDrive\\Desktop\\sqlite databases\\PRODUCTS\\Products.db");
        String s = "INSERT INTO Users(Username,Password,Email,UserID)  VALUES (?,?,?,?) ";
        PreparedStatement registera = connectt.prepareStatement(s);
        registera.setString(1, username);
        registera.setString(2, password);
        registera.setString(3, email);
        registera.setInt(4, ID);

        System.out.println(username);
        System.out.println(password);
        System.out.println(email);
        registera.executeUpdate();
        System.out.println("Added to Database");
        sendMail();
        registerr.setStyle("-fx-background-color: #69ff59;");
        registerr.setText("Check Your MailBox");
        registerr.setOnMouseClicked(event -> {
            registerr.setText("Email Has been sent");
        });
        textUser.setText(null);
        textEmail.setText(null);
        textPass.setText(null);
        regiPane.setVisible(false);

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    }
}

下面是发送电子邮件的代码:

代码语言:javascript
复制
public void sendMail() throws MessagingException {
    String USER_NAME = "stoc****";
    String from = USER_NAME;
    String PASSWORD = "************";
    String pass = PASSWORD;
    String RECIPT = textEmail.getText();
    String TOPIC = "Welcome " + username + "!";
    String BODY = "Dear user! " +
            "You can sign into StockFX by your ID/Username and password" +
            "User ID: " + ID + "\n" + "Password: " + password + "\n" +
            "We would like to thank you for using our services now and in future!";
    String[] to = {RECIPT};
    Properties props = System.getProperties();
    String host = "smtp.gmail.com";
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.user", from);
    props.put("mail.smtp.password", pass);
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.auth", "true");
    Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(
                    "****", PASSWORD);
        }
    });
    MimeMessage message = new MimeMessage(session);


    try {
        try {
            message.setFrom(new InternetAddress(from));
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        InternetAddress[] toAddress = new InternetAddress[to.length];
        // To get the array of addresses
        for (int i = 0; i < to.length; i++) {
            try {
                toAddress[i] = new InternetAddress(to[i]);
            } catch (AddressException e) {
                e.printStackTrace();
            }
        }
        for (int i = 0; i < toAddress.length; i++) {
            try {
                message.addRecipient(Message.RecipientType.TO, toAddress[i]);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
        try {
            message.setSubject(TOPIC);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        try {
            message.setText(BODY);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        try {
            message.saveChanges();
        } catch (MessagingException e) {
            e.printStackTrace();
        }


        registerr.setStyle("-fx-background-color: #69ff59;");
        registerr.setText("You can now log in");
        registerr.setDisable(false);
        textUser.setText(null);
        textEmail.setText(null);
        textPass.setText(null);
        regiPane.setVisible(false);
        Transport transport = session.getTransport("smtp");
        System.out.println("get protocl");
        transport.connect(host, from, pass);
        System.out.println("get host,from and password");
        transport.sendMessage(message, message.getAllRecipients());
        System.out.println("get recipients");
        transport.close();
        System.out.println("close");
        System.out.println("Email Sent Successfully!");
    } finally {
        System.out.println("Complete Process");
    }

}

在InteliJ中一切正常,但是在runable jar中无效的sendEmail不能工作,我是个新手。导入:

代码语言:javascript
复制
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.*;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
import java.util.Random;
import java.util.ResourceBundle;

这个类是Controller类

这是主类:

代码语言:javascript
复制
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import java.io.IOException;

public class Main extends Application {

@Override
public void start(Stage UI) throws IOException {
    Parent root = FXMLLoader.load(getClass().getResource("DashBoard.fxml"));
    UI.setTitle("DIREXT SCANNER (DEMO VER 0.5)");
    UI.setScene(new Scene(root, 800, 600));
    UI.initStyle(StageStyle.UNDECORATED);
    UI.setResizable(false);
    UI.show();
    UI.setFullScreenExitHint("Press 'ESC' to exit full screen");

}
public static void main(String[] args){
    launch(args);
}
}

我试着重建项目,删除并再次添加库,但同样的结果是否有人遇到同样的问题?它是与IDE相关的,还是缺少导入或方法?我试着在论坛上寻找类似的问题,我已经修复了一些东西,因为以前runable jar根本不会运行。如果有问题,请有人提供链接。

编辑这是我从PowerShell运行jar时得到的错误:

代码语言:javascript
复制
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source)
        at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
        at javafx.base/javafx.event.Event.fireEvent(Unknown Source)
        at javafx.graphics/javafx.scene.Node.fireEvent(Unknown Source)
        at javafx.controls/javafx.scene.control.Button.fire(Unknown Source)
        at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source)
        at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(Unknown Source)
        at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
        at javafx.base/javafx.event.Event.fireEvent(Unknown Source)
        at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Unknown Source)
        at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1300(Unknown Source)
        at javafx.graphics/javafx.scene.Scene.processMouseEvent(Unknown Source)
        at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.View.notifyMouse(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.reflect.Trampoline.invoke(Unknown Source)
        at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(Unknown Source)
        at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(Unknown Source)
        ... 52 more
Caused by: java.lang.NoClassDefFoundError: javax/activation/DataHandler
        at sample.DashBoardController.registerUser(DashBoardController.java:321)
        ... 62 more
Caused by: java.lang.ClassNotFoundException: javax.activation.DataHandler
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        ... 63 more
EN

回答 2

Stack Overflow用户

发布于 2018-09-14 23:35:32

多亏了你的帮助,我找到了解决方案,在项目结构中,我删除了所有的工件,模块和库,并重新添加了所有内容,然后重新构建项目,然后构建工件,我还将我的项目文件夹设置为Source Root,它起作用了。

票数 1
EN

Stack Overflow用户

发布于 2018-09-13 23:17:26

如果您使用的是外部库,因此在解压缩到jar文件时,此库的路径中有时会发生问题,有时可行的简单解决方案是创建新项目,并创建新文件作为旧项目,然后移动它们

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52316105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档