2012-04-20 194 views
0

當我使用Java郵件驗證時,發送來自Java的電子郵件時出現問題。我不知道我得到以下例外的方式:從java發送電子郵件

javax.mail.AuthenticationFailedException: 530 Access denied 

我將在下面顯示整個代碼。你能告訴我我做錯了什麼嗎?
請注意,在添加身份驗證之前,一切正常。 另外,你知道是否有可能在兩個不同的域名之間發送電子郵件(例如Gmail到雅虎)?

// 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 = "[email protected]"; 
     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:"+ 
     "[email protected]" + "?subject=" + 
     "Proposal" + " " + 
     "55544 -Andreea Deal(55544)(V.A)AP lavi test"+ 
     " for Approval number " + "10700" + "." + 
     " For information only." + "\">" + 
     "[email protected]" + "</a><br>"; 



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

     if (valid == true) { 
      try { 

      SMTPSending("[email protected]", 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); 

    } 
} 
+0

您能否請您檢查您的密碼發送是否正確,並添加此屬性並檢查 true。 – Phani 2012-04-20 13:34:29

+3

你應該只發布相關的代碼,大部分你在這裏發佈的可能是不相關的gui代碼,這與你的問題無關。 – oers 2012-04-20 14:07:24

回答

1

這是我的代碼,我曾經通過我的Gmail帳戶發送電子郵件,在我的JSP的學術項目:

package my_util; 

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

public class Mail 
{ 
    private String d_email = "[email protected]", 
        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; 
     } 
    } 

} 

我希望它可以幫助你。 :)