关于javamail发送邮件的问题

[code="java"][/code]package smack;

import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class JavaMailTest {
public static void main(String[] args) throws AddressException, MessagingException {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

      Properties props = System.getProperties(); 
      props.setProperty("mail.smtp.host", "smtp.gmail.com"); 
      props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); 
      props.setProperty("mail.smtp.socketFactory.fallback", "false"); 
      props.setProperty("mail.smtp.port", "465"); 
      props.setProperty("mail.smtp.socketFactory.port", "465"); 
      props.put("mail.smtp.auth", "true"); 
      final String username = "xxx"; 
      final String password = "xxx"; 
      Session session = Session.getDefaultInstance(props, new Authenticator(){ 
          protected PasswordAuthentication getPasswordAuthentication() { 
              return new PasswordAuthentication(username, password); 
          }}); 


      Message msg = new MimeMessage(session); 


      msg.setFrom(new InternetAddress(username+"@gmail.com" )); 
      msg.setRecipients(Message.RecipientType.TO, 
        InternetAddress.parse("suken2817403@gmail.com",false)); 
      msg.setSubject("Hello"); 
      msg.setText("How are you"); 
      msg.setSentDate(new Date()); 
      Transport.send(msg); 

      System.out.println("Message sent."); 
    } 

}
异常如下:
Exception in thread "main" javax.mail.SendFailedException: Sending failed;
nested exception is:
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
nested exception is:
java.io.IOException: Couldn't connect using "javax.net.ssl.SSLSocketFactory" socket factory to host, port: smtp.gmail.com, 465; Exception: java.lang.reflect.InvocationTargetException
at javax.mail.Transport.send0(Transport.java:219)
at javax.mail.Transport.send(Transport.java:81)
at smack.JavaMailTest.main(JavaMailTest.java:46)
一直是这个异常,用spring整合也是这个异常

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
nested exception is:
java.io.IOException: Couldn't connect using "javax.net.ssl.SSLSocketFactory" socket factory to host, port: smtp.gmail.com, 465; Exception: java.lang.reflect.InvocationTargetException

异常就已经说明了问题所在嘛

不能用"javax.net.ssl.SSLSocketFactory"连接smtp.gmail.com, 465

/**
* @function diagnosis
* @author 李傲
* @param stmpAddress:发送邮件的服务器地址
* @param portnum:发送邮件的服务器端口号
* @param fromUrl:发送方地址
* @param username:发送邮件的服务器的用户名
* @param password:发送邮件的服务器的密码
* @param toURL:接收方地址
* @param title:邮件标题
* @param contect:邮件正文
* @param dirs:附件所在目录
* @return 无
* @exception 无
*/
public String sendMail(String stmpAddress, int portnum, String fromUrl,
String username, String password, String toURL, String title,
String contect, String dirs) {
JavaMailSender mailSender = (JavaMailSender) getBean("mailSender");
((JavaMailSenderImpl) mailSender).setHost(stmpAddress);
((JavaMailSenderImpl) mailSender).setUsername(username);
((JavaMailSenderImpl) mailSender).setPassword(EncryptData.decrypt(password));
((JavaMailSenderImpl) mailSender).setPort(portnum);
if (stmpAddress.indexOf("gmail") > 0) {
Properties p = new Properties();
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.smtp.timeout", "25000");
p.setProperty("mail.smtp.starttls.enable", "true");
p.setProperty("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
p.setProperty("mail.smtp.socketFactory.fallback", "false");
((JavaMailSenderImpl) mailSender).setJavaMailProperties(p);
}
MimeMessage mime = mailSender.createMimeMessage();
MimeMessageHelper helper;
try {
helper = new MimeMessageHelper(mime, true, "utf-8");
helper.setFrom(fromUrl);// "xxx@xxx.xxx"
helper.setTo(toURL);// "xxx@xxx.xxx"
helper.setSubject(title);
helper.setText(contect, true);

        if (dirs != null) {
            File dirFile = new File(dirs);
            File files[] = dirFile.listFiles();

            if(files!=null){

            for (int i = 0; i < files.length; i++) {

                try {
                    helper.addAttachment(new String(files[i].getName()
                            .getBytes("GBK"), "iso-8859-1"), files[i]);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    return CommonString.MAIL_SEND_FAILED;
                }
            }
            }
        }

    } catch (MessagingException e) {
        e.printStackTrace();
        return CommonString.MAIL_SEND_FAILED;
    }
    mailSender.send(mime);
    return null;
}

楼主。不是所有邮箱的smtp都可以连的,你在做这个整合前,先得测试一下这个smtp能不能用,有些事需要收费的,比如163的。

详细测试方法google之。

每次test程序前 先test下邮箱在OUTLOOK EXPRESS中能不能发邮件,不能的话程序就发不了邮件 貌似是这样的