java - 从java发送电子邮件

标签 java api sendmail

当我使用 Java 邮件身份验证时,我在从 Java 发送电子邮件时遇到问题。我不知道如何得到以下异常:

javax.mail.AuthenticationFailedException: 530 Access denied

我将在下面显示整个代码。你能告诉我我做错了什么吗?
请注意,在添加身份验证之前,一切正常。 另外,您知道是否可以在 2 个不同的域之间发送电子邮件(例如 gmail 到 yahoo)?

// LoginDemo.java

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

import java.util.Properties;

//import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
//import javax.mail.PasswordAuthentication;
import javax.mail.PasswordAuthentication;

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

class Popup extends JFrame 
{
    private static final long serialVersionUID = 1L;
    JLabel label;
    JPanel panel;
    Popup(){
    label = new JLabel();
    label.setText("E-mail sent...");
        panel=new JPanel();
        panel.setLayout(null);
        label.setBounds(10,5, 100, 23);
        panel.add(label);

         add(panel);

         setTitle("Sending E-mails");
    }
}

class Authenticator extends javax.mail.Authenticator {
    public PasswordAuthentication authentication;

    public Authenticator() {
        String username = "andreeav@domain.com";
        String password = "password";
        authentication = new PasswordAuthentication(username, password);
    }

    public PasswordAuthentication getPasswordAuthentication() {
        return authentication;
    }
}
<小时/>
class Login extends 
JFrame implements ActionListener
{

    private static final long serialVersionUID = 1L;

    JButton Send;
        JPanel panel;
        JLabel label1,label2, label3;
        final JTextField  text1,text2;
        JTextArea text3;
        String body_mail = " Dear Lavinia  \r\n\n 55544 - Andreea Deal (PERSONAL CARE PRODUCTS DIVISION) (CA)   (55544)(V.SOAP)AP needs your \n approval with the following details: \r\n Approval Cycle#: 1 \r\n Channel   Name: Andreea Channel \r\n Advertiser:Andreea Advertiser \r\n Agency:   ANDREEA AGENCY(P) LTD (CA) \r\n Period: 04/10/2012 - 04/30/2012 \r\n Amount: 436,000.00  \r\n   Expected Annual Spend: 0.00  \r\n Last Year Total Budget: 0.00 INR \r\n Last Year Discount: Minimum = 0.00, Maximum = 0.00 \r\n Comments: To approve or reject the proposal, please do not reply to sender e-mail   address. \n Please reply with your comments to the following e-mail address accordingly:  ";


    Login()
    {

        label3 = new JLabel();
        label3.setText("Created by andreeav on April 20th 2012");

        label1 = new JLabel();
        label1.setText("To:");
        text1 = new JTextField(50);

        label2 = new JLabel();
        label2.setText("Subject:");
        text2 = new JTextField(50);

        text3 = new JTextArea(100, 100);

            text3.setText(body_mail);
        Send=new JButton("Send");

            panel=new JPanel();
            panel.setLayout(null);

            label1.setBounds(10,5, 50, 23);
        panel.add(label1);
            text1.setBounds(60, 5, 550, 23);
        panel.add(text1);
        label2.setBounds(10,33,50,23);
        panel.add(label2);
        text2.setBounds(60, 33, 550, 23);
        panel.add(text2);
            text3.setBounds(10, 61, 600, 430);
        text3.setLineWrap(true);

        label3.setBounds(10, 513, 250, 23);
            panel.add(label3);
        panel.add(text3);

        Send.setBounds(520, 513, 90, 23);

        panel.add(Send);
        add(panel);
            Send.addActionListener(this);
            setTitle("Sending E-mails");
    }

    public static boolean isValidEmailAddress(String email)
     {
     try {
     new javax.mail.internet.InternetAddress(email, true);
     } catch (javax.mail.internet.AddressException e) {
     return false;
     }
     return true;
     }



    public static  Session getSession() {
        Authenticator authenticator = new Authenticator();

        Properties properties = new Properties();
        properties.setProperty("mail.smtp.submitter", authenticator.getPasswordAuthentication().getUserName());
        properties.setProperty("mail.smtp.auth", "true");

        properties.setProperty("mail.smtp.host", "smtp.mail.yahoo.com");
        properties.setProperty("mail.smtp.port", "25");

        return Session.getInstance(properties, authenticator);
    }


    public static void SMTPSending(String from, String to, String subject, String content, String host) throws MessagingException
    {


          // Get system properties
           Properties properties = System.getProperties();  

          // Setup mail server
           properties.setProperty("mail.smtp.host", host);  

          // Get the default Session object.

          // Create a default MimeMessage object.
           MimeMessage message = new MimeMessage(getSession());  

          // Set the RFC 822 "From" header field using the
           // value of the InternetAddress.getLocalAddress method.
           message.setFrom(new InternetAddress(from)); 

          // Add the given addresses to the specified recipient type.
           message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

          // Set the "Subject" header field.
           message.setSubject(subject);  

          // Sets the given String as this part's content,
           // with a MIME type of "text/plain".
           message.setText(content,"UTF-8", "html");


          // Send message
           Transport.send(message);


    }



   public void actionPerformed(ActionEvent ae)
    {

        String value1=text1.getText();
        String value2=text2.getText();
        String value3=text3.getText();
        System.out.println(value3);


    String value4 = "To approve this " + "proposal" + ": " +
        "<a href=\"mailto:"+
        "dealapproval@domain.com" + "?subject=" +
        "Proposal" + " " +
        "55544 -Andreea Deal(55544)(V.A)AP lavi test"+
        " for Approval number " + "10700" + "." +
        " For information only." + "\">" + 
        "dealapproval@domain.com" + "</a><br>";



        //String value4 = "www.google.com";
        value3 = value3+":  "+value4;
        boolean valid = isValidEmailAddress(value1);

        if (valid == true) {
             try {

            SMTPSending("andreeav@domain.com", value1, value2, value3,"mydomain");
            } catch (MessagingException e) {

                e.printStackTrace();
            }

             Popup page =new Popup();
            //set frame size
            page.setSize(200, 100);

             //center frame on screen
             page.setLocationRelativeTo(null);

            page.setVisible(true);


       // page.dispose();
    }
        else{

            JOptionPane.showMessageDialog(this,"Invalid e-mail address!","Error",JOptionPane.ERROR_MESSAGE);
    }
}
}
<小时/>
 class LoginDemo
{
    public static void main(String arg[])
    {
        try
        {

       Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
       int height = screenSize.height;
       int width = screenSize.width;

        Login frame=new Login();
        //set frame size
        frame.setSize(width/2, height/2+200);

         //center frame on screen
         frame.setLocationRelativeTo(null);

        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }
    catch(Exception e)
        {JOptionPane.showMessageDialog(null, e.getMessage());}
    }
}
<小时/>
//NextPage.java

import javax.swing.*;

class NextPage extends JFrame
{

    private static final long serialVersionUID = 1L;

    NextPage()
    {
       setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
       setTitle("Sending E-mails");
       setSize(400, 400);

    }
 }

最佳答案

这是我在 JSP 学术项目中用于通过 Gmail 帐户发送电子邮件的代码:

package my_util;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class Mail
{
    private String  d_email = "myemailid@gmail.com",
                    d_password = "mypassword",
                    d_host = "smtp.gmail.com",
                    d_port  = "465";


    public boolean sendMail(String strTo, String strSubject, String strBody){

        Properties props = new Properties();
        props.put("mail.smtp.user", d_email);
        props.put("mail.smtp.host", d_host);
        props.put("mail.smtp.port", d_port);
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.socketFactory.port", d_port);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        try
        {
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage msg = new MimeMessage(session);
            msg.setText(strBody);
            msg.setSubject(strSubject);
            msg.setFrom(new InternetAddress(d_email));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(strTo));
            msg.saveChanges();

            Transport transport = session.getTransport("smtp");
            transport.connect(d_host, d_email, d_password);
            transport.sendMessage(msg, msg.getAllRecipients());
            transport.close();
            return true;
        }
        catch (Exception mex)
        {
            mex.printStackTrace();
            return false;
        }
    }

}

希望对你有帮助。 :)

关于java - 从java发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247160/

相关文章:

android - 如何从 APK 文件中提取 API 调用?

java - 使用 JExcel API 复制 Excel 工作表时遇到问题

linux - DSN : Service unavailable sendmail linux

java - 尝试获取签名的 apk 时 Android Studio 出现 "Got negative length for block"错误

java - 在 Eclipse Indigo 中注释声明托管 bean 和代码完成

java - 为什么这没有给出错误?

php - sendmail 工作但 PHP mail() 失败

java - 漂亮的 HTML5 输出格式

javascript - GMail API Users.threads.list 缺少 "Messages"字段

laravel - 在 Laravel 中使用 Sendmail 发送电子邮件的正确配置是什么?