首页 > 代码库 > java基础-javaMail

java基础-javaMail

//EmailAuthenticator类

 

import javax.mail.Authenticator;  
import javax.mail.PasswordAuthentication;  
 
public class EmailAuthenticator extends Authenticator  
{  
    private String username;  
    private String userpsd;  
    public EmailAuthenticator(String username, String userpsd)  
    {  
        this.username = username;  
        this.userpsd = userpsd;  
    }  
    public String getUsername()  
    {  
        return username;  
    }  
    public void setUsername(String username)  
    {  
        this.username = username;  
    }  
    public String getUserpsd()  
    {  
        return userpsd;  
    }  
    public void setUserpsd(String userpsd)  
    {  
        this.userpsd = userpsd;  
    }  
    @Override  
    protected PasswordAuthentication getPasswordAuthentication()  
    {  
        return super.getPasswordAuthentication();  
    }  

 

//main方法测试

import james.EmailAuthenticator;

import java.util.Properties;  
import javax.mail.*;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.MimeMessage;  

public class Test {
  public static void main(String[] args)throws Exception {
      //这是邮件服务器地址  
      String smtp = "smtp.163.com";  
      //用户邮箱地址,用自己的邮箱啊  
      String from = "test@163.com";  
      //要发送的邮箱对方邮箱 
      String to = "test1@163.com";  
      //构造用户身份验证验证对象,参数为用户名和口令  
      EmailAuthenticator auth = new EmailAuthenticator("test","password");  
      //获取系统属性对象  
      Properties props = System.getProperties();  
      //设置邮件服务器和是否身份验证  
      props.put("mail.smtp.host", smtp);  
      /*  如果写成这样 props.put("mail.smtp.auth", true);
       *  会爆 com.sun.mail.smtp.SMTPSendFailedException:异常
       *  应该写成 props.put("mail.smtp.auth", "true");
       * */  
      props.put("mail.smtp.auth", "true");  
      //获得Session对象  
      Session session = Session.getInstance(props,(Authenticator)auth);  
      //以session作为参数建立MimeMessage对象  
      //这里Mime是支持该协议的类,用来描述邮件的内容  
      MimeMessage msg = new MimeMessage(session);  
      msg.setFrom(new InternetAddress(from));  
      msg.addRecipient(Message.RecipientType.TO,new InternetAddress(to));  
      msg.setSubject("标题");  
      String s = "内容";  
      msg.setText(s);  
      //设置好MimeMessage后,从Session中建立Transport对象  
      //Transport对象用于发送邮件信息,getTransport的参数  
      //表明发送邮件使用的协议。  
      Transport transport = session.getTransport("smtp");  
      transport.connect(smtp,"test@163.com","password");  
      transport.sendMessage(msg,msg.getAllRecipients());  
      transport.close();  
      System.out.println("邮件发送成功");  
}
}

 

如果是myeclipse 的话需要 mail.jar 包

 

在使用javamail发送邮件的时候,如果出现“java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream”这样的错误,
javax.mailjavax.activation这两个包已经在javaEE5当中属于基础包了,就是MyEclipse中已经自带了。但是里面的方法与最新JDK的javamail包不一致导致的错误
解决方法:
进入MyEclipse的安装目录下(这是我机器上的MyEclipse安装目录,也许你的不同)
C:\Users\Administrator\MyEclipse 6.0\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710\data\libraryset\EE_5
这个目录下,可以看到javaee.jar包,双击使用压缩软件打开把这个包文件,然后进到javax文件夹中,删除mail目录和activation目录,也可能是jar包。
删掉之后,在运行代码,就不会出现错误了,当然不要把整个javaee.jar包给删除了,他里面还有其它很多功能包,比如servlet,如果有引用 其它功能,还是会报错的.
最后添加最新的mail.jaractivation.jar就OK了

 

java基础-javaMail