Java通过Gmail发送电子邮件

Dav*_*vid 4 java gmail send

以下代码应该通过gmail发送电子邮件,但它会出现以下错误:

在此输入图像描述

在我的Gmail帐户上,我收到一条消息,指出登录已被阻止,我应该使用像Gmail这样的安全应用来访问我的帐户.源代码如下所示:

public void doSendMail(){
    username = txtFrom.getText();
    password= new String(txtPassword.getPassword());
    to = txtTo.getText();
    subject = txtSubject.getText();
    email_body = jTextArea1.getText();

    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "587");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.port", "587");

    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator(){
                @Override
                protected PasswordAuthentication getPasswordAuthentication(){
                    return new PasswordAuthentication(username, password);
                }
    }
    );
    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(username));
        message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
        message.setSubject(subject);
        message.setText(email_body);
        Transport.send(message);

        JOptionPane.showMessageDialog(this, "Message Sent!","Sent",JOptionPane.INFORMATION_MESSAGE);

    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, e.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以对代码做什么让它通过gmail发送邮件?

San*_*aha 5

您的源代码非常适合通过Gmail发送电子邮件.可能是您必须允许您的帐户通过不太安全的访问https://www.google.com/settings/security/lesssecureapps

这是你的代码.我做了很少的修改就可以作为独立程序运行.它需要两个罐子:1)mail-1.4.7.jar和2)activation-1.1.1.jar

import java.util.Properties;
import java.util.Scanner;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.swing.JOptionPane;

/**
 *  Following jar are required:
 *  1) mail-1.4.7.jar from http://central.maven.org/maven2/javax/mail/mail/1.4.7/mail-1.4.7.jar
 *  2) activation-1.1.1.jar from http://central.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar
 *
 */
public class Test {

    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.print("gmail username: ");
        String username = sc.next();
        System.out.print("gmail password: ");
        String password = sc.next();
        System.out.print("destination email address: ");
        String to = sc.next();
        System.out.print("subject: ");
        String subject = sc.next();
        System.out.print("email body: ");
        String email_body = sc.next();
        Test test = new Test();
        test.doSendMail(username, password, to, subject, email_body);
        sc.close();

    }
    // sends mail
    public void doSendMail(final String username, final String password, String to, String subject, String email_body) {

        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.socketFactory.port", "587");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.port", "587");

        Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(username));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            message.setSubject(subject);
            message.setText(email_body);
            Transport.send(message);
            System.out.println("message sent");
            JOptionPane.showMessageDialog(null, "Message Sent!", "Sent", JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception e) {
            System.out.println(e);
            JOptionPane.showMessageDialog(null, e.toString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)