1
public class SendMail {

  private class SMTPAuthenticator extends javax.mail.Authenticator 
  {

    @Override
    public PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication("userID", "pwd");
    }
  }

   public void sendMail() throws Exception {
   String strFromIds = "xyz@gmail.com";
   String strToIds = "xyz@domain.com";
   String strSubject = "Sample Mail Subject.";
   String strContent = "Sample Mail Content";
   Properties objProperties = System.getProperties();
   objProperties.put("mail.smtp.host", "<smtp host name>");
   objProperties.put("mail.smtp.port", "25");
   objProperties.put("mail.transport.protocol", "smtp");
   objProperties.put("mail.smtp.submitter", "<user id>");
   objProperties.put("mail.smtp.auth", true);
   objProperties.put("mail.debug", "true");
   Session objSMTPSession = Session.getDefaultInstance(objProperties, new  
                                                     SMTPAuthenticator());

   Message objMessage = new MimeMessage(objSMTPSession);
   objMessage.setFrom(new InternetAddress(strFromIds));
   InternetAddress[] objToAddress = new InternetAddress[1];     
   objToAddress[0] = new InternetAddress(strToIds);
   objMessage.setRecipients(Message.RecipientType.TO, objToAddress);

   objMessage.setSubject(strSubject);

   Multipart objMultiPart = new MimeMultipart();
   MimeBodyPart objBodyPart = new MimeBodyPart();

   objBodyPart.setText(strContent);
   objMultiPart.addBodyPart(objBodyPart);

   objMessage.setContent(objMultiPart);

   Date objSentDate = new Date();
   objMessage.setSentDate(objSentDate);
   Transport.send(objMessage);
    objMessage = null;
 }

 public static void main(String[] args) {
try {
    new SendMail().sendMail();
} catch (Exception ex) {
    System.out.println("Exception in main :: " + ex);
    }
 }
}

通过使用上面的代码,我可以使用 GMail 邮件 id 的发件人地址(例如:xyz@gmail.com)向 gmail 用户发送邮件,而无需提供 gmail id 的身份验证详细信息,

在这里,我给出了我的 smtp(公司邮件服务器)服务器主机名,以及我公司邮件服务器的用户 ID 和密码(作为 smtp 主机给出)...

有了这些,我以 GMail 用户的身份发送邮件,

但是为什么 GMAIL 接受这种类型的邮件。

4

2 回答 2

6

您已经发现了为什么会有垃圾邮件。:-)

您正在通过公司的邮件服务器发送邮件。您公司的邮件服务器似乎没有检查您使用的发件人地址是否对您的邮件服务器有效,因此它允许您使用您的 Gmail 地址而不是您的公司地址。不,它不会通过 Gmail 检查是否正常。

于 2013-01-28T19:55:58.027 回答
0

未经任何身份验证,Gmail 无法发送邮件。

您无法使用错误的凭据进行身份验证。换句话说,如果您有密码(而 gmail 需要密码),您将无法在不发送密码的情况下登录,因此您将无法发送任何内容。

一般来说,你可以,当然。在您的具体示例代码中,您使用的是不允许匿名发送的 GMail。

从他们的参考资料:

smtp.gmail.com(使用身份验证) 使用身份验证:是 TLS/STARTTLS 端口:587 SSL 端口:465

关于您的 catch 子句的附加评论:

在我看来,您严重滥用了异常的想法。更好的方法是:

catch(Exception x)
 {
var s = x.Message;
if ( x.InnerException!=null )
{
    s += Environment.NewLine + x.InnerException.Message;
}

MessageBox.Show(s);
}
于 2013-01-28T09:57:40.617 回答