java发邮件发件人必须是获得认证的人

import  javax.mail. * ;
import  javax.mail.internet. * ;
import  java.util.Date;
import  javax.activation. * ;
import  java.io. * ;
public   class  SendMail  {

  
private MimeMessage mimeMsg;  //MIME邮件对象

  
private Session session;      //邮件会话对象
  private Properties props;     //系统属性
  private boolean needAuth = false;  //smtp是否需要认证

  
private String username = "";  //smtp认证用户名和密码
  private String password = "";

  
private Multipart mp;    //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象


 
/**
  * 
  
*/

  
public SendMail() {
    setSmtpHost(
"smtp.163.com");//如果没有指定邮件服务器,就从getConfig类中获取
    createMimeMessage();
  }


  
public SendMail(String smtp){
    setSmtpHost(smtp);
    createMimeMessage();
  }


 

 
/**
  * 
@param hostName String
  
*/

  
public void setSmtpHost(String hostName) {
    System.out.println(
"设置系统属性:mail.smtp.host = "+hostName);
    
if(props == null)props = System.getProperties();         //获得系统属性对象

    props.put(
"mail.smtp.host",hostName);                 //设置SMTP主机
  }



 
/**
  * 
@return boolean
  
*/

  
public boolean createMimeMessage()
  
{
    
try{
      System.out.println(
"准备获取邮件会话对象!");
      session 
= Session.getDefaultInstance(props,null);   //获得邮件会话对象
    }

    
catch(Exception e){
      System.err.println(
"获取邮件会话对象时发生错误!"+e);
      
return false;
    }


    System.out.println(
"准备创建MIME邮件对象!");
    
try{
      mimeMsg 
= new MimeMessage(session);                 //创建MIME邮件对象
      mp = new MimeMultipart();

      
return true;
    }

    
catch(Exception e){
      System.err.println(
"创建MIME邮件对象失败!"+e);
      
return false;
    }

  }


 

 
/**
  * 
@param need boolean
  
*/

  
public void setNeedAuth(boolean need) {
    System.out.println(
"设置smtp身份认证:mail.smtp.auth = "+need);
    
if(props == null)props = System.getProperties();

    
if(need){
      props.put(
"mail.smtp.auth","true");
    }
else{
      props.put(
"mail.smtp.auth","false");
    }

  }


 

 
/**
  * 
@param name String
  * 
@param pass String
  
*/

  
public void setNamePass(String name,String pass) {
    username 
= name;
    password 
= pass;
  }



 
/**
  * 
@param mailSubject String
  * 
@return boolean
  
*/

  
public boolean setSubject(String mailSubject) {
    System.out.println(
"设置邮件主题!");
    
try{
      mimeMsg.setSubject(mailSubject);
      
return true;
    }

    
catch(Exception e) {
      System.err.println(
"设置邮件主题发生错误!");
      
return false;
    }

  }



 
 
/**
  * 
@param mailBody String
  
*/

  
public boolean setBody(String mailBody) {
    
try{
      BodyPart bp 
= new MimeBodyPart();
      bp.setContent(
"<meta http-equiv=Content-Type content=text/html; charset=gb2312>"+mailBody,"text/html;charset=GB2312");
      mp.addBodyPart(bp);

      
return true;
    }

    
catch(Exception e){
      System.err.println(
"设置邮件正文时发生错误!"+e);
      
return false;
    }

  }



 
/**
  * 
@param name String
  * 
@param pass String
  
*/

  
public boolean addFileAffix(String filename) {

 System.out.println(
"增加邮件附件:"+filename);

 
try{
      BodyPart bp 
= new MimeBodyPart();
      FileDataSource fileds 
= new FileDataSource(filename);
      bp.setDataHandler(
new DataHandler(fileds));
      bp.setFileName(fileds.getName());

      mp.addBodyPart(bp);

      
return true;
    }

    
catch(Exception e){
      System.err.println(
"增加邮件附件:"+filename+"发生错误!"+e);
      
return false;
    }

  }


 

 
/**
  * 
@param name String
  * 
@param pass String
  
*/

  
public boolean setFrom(String from) {
    System.out.println(
"设置发信人!");
    
try{
      mimeMsg.setFrom(
new InternetAddress(from));             //设置发信人
      return true;
    }

    
catch(Exception e)
    
return false; }
  }



 
/**
  * 
@param name String
  * 
@param pass String
  
*/

  
public boolean setTo(String to){
    
if(to == null)return false;

    
try{
      mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
      
return true;
    }

    
catch(Exception e)
    
{   return false;   }

  }


 
/**
  * 
@param name String
  * 
@param pass String
  
*/

  
public boolean setCopyTo(String copyto)
  
{
    
if(copyto == null)return false;
    
try{
      mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));
      
return true;
    }

    
catch(Exception e)
    
return false; }
  }



 
/**
  * 
@param name String
  * 
@param pass String
  
*/

  
public boolean sendout()
  
{
    
try{
      mimeMsg.setContent(mp);
      mimeMsg.saveChanges();
      System.out.println(
"正在发送邮件....");
     
// Email_Autherticatorbean auth = new Email_Autherticatorbean(this.username,this.password);

      Session mailSession 
= Session.getInstance(props,null);
      Transport transport 
= mailSession.getTransport("smtp");
      transport.connect((String)props.get(
"mail.smtp.host"),username,password);
      transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
      
//transport.send(mimeMsg);

      System.out.println(
"发送邮件成功!");
      transport.close();

      
return true;
    }

    
catch(Exception e)
    
{
      System.err.println(
"邮件发送失败!"+e);
      
return false;
    }

  }



  
/**
   *  Just do it as this
   
*/

 
  
public static void main(String[] args) {

    String mailbody 
= "<meta http-equiv=Content-Type content=text/html; charset=gb2312>"+
        
"<div align=center><a href=http://www.csdn.net> csdn </a></div>";
//daoge163@126.com
    SendMail themail = new SendMail("smtp.163.com");
    themail.setNeedAuth(
true);

    
if(themail.setSubject("标题javamail发送测试"== falsereturn;
    
if(themail.setBody(mailbody) == falsereturn;
    
if(themail.setTo("邮件地址"== falsereturn;
    
if(themail.setFrom("获得认证的邮件地址"== falsereturn;
    
if(themail.addFileAffix("c:/boot.ini"== falsereturn;
    themail.setNamePass(
"用户名","密码");//获得认证的邮件地址的用户名和密码

    
if(themail.sendout() == falsereturn;    
  }

  
/*
  public static void main(String[] argv) {
      System.out.println(System.getProperty("user.home"));
   }
 
*/

}

 我用的163提供的smtp服务,我的邮箱是老以前申请的,可以用。

对于最近申请的163邮箱,不能提供这个服务了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要明确的是,退信邮件是指由于某些原因无法送达的邮件,通常会包含有关无法送达的原因以及邮件的一些基本信息,如发件人、收件人、邮件主题等。 在Java中,可以使用JavaMail API来处理邮件。要获取退信邮件中的收件人地址,可以按照以下步骤操作: 1. 使用JavaMail API创建一个Session对象,并设置相关属性,如邮件服务器地址、端口号、认证信息等。 2. 使用Session对象创建一个Store对象,并连接到邮件服务器。 3. 使用Store对象打开收件箱,获取退信邮件。 4. 遍历退信邮件,使用getMessage()方法获取每封邮件的Message对象。 5. 使用Message对象的getRecipients()方法获取邮件的收件人地址,该方法返回一个Address数组,可以通过遍历数组获取每个收件人的地址。 以下是示例代码: ```java // 创建Session对象 Properties props = new Properties(); props.setProperty("mail.store.protocol", "imap"); props.setProperty("mail.imap.host", "邮件服务器地址"); props.setProperty("mail.imap.port", "邮件服务器端口号"); Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("用户名", "密码"); } }); // 创建Store对象并连接到邮件服务器 Store store = session.getStore(); store.connect(); // 打开收件箱并获取退信邮件 Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); SearchTerm search = new SubjectTerm("Delivery Status Notification"); Message[] messages = folder.search(search); // 遍历退信邮件并获取收件人地址 for (Message message : messages) { Address[] recipients = message.getRecipients(Message.RecipientType.TO); if (recipients != null) { for (Address recipient : recipients) { String address = recipient.toString(); System.out.println(address); } } } // 关闭Folder和Store对象 folder.close(false); store.close(); ``` 需要注意的是,以上代码仅是示例,实际使用可能需要根据具体情况进行修改。此外,为了保护用户隐私,通常情况下不应该在未经用户授权的情况下获取他人的邮件地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值