【问题标题】:How i send email without authentication using java我如何使用java发送未经身份验证的电子邮件
【发布时间】:2014-05-15 12:25:31
【问题描述】:

我想使用 java 发送未经身份验证的电子邮件。 有人可以帮我吗?

通过身份验证,我这样做:

    public void sendEmail() throws EmailException{
    SimpleEmail email = new SimpleEmail();
    email.setHostName("smtp.gmail.com");
    email.setSmtpPort(465);
    email.addTo("XXX@gmail.com", "XXXX");
    email.setFrom("XXXX@gmail.com","XXXXX");
    email.setSubject("testando . . .");
    email.setMsg("testando 1");
    email.setSSL(true);
    email.setAuthentication("xxxxxx@gmail.com", "XXXXX");
    email.send();
}

我忘了说我没有提供者。我最后需要一个提供商,我有 emailFrom 主题和消息,需要如何发送这封电子邮件?

【问题讨论】:

  • 这与Java无关。只有在邮件服务器允许的情况下,您才可以在不进行身份验证的情况下发送电子邮件,在这种情况下,您将省略 setAuthentication() 调用。如果 SMTP 服务器需要身份验证,您必须提供它。如果您正在测试,您可以使用模拟 SMTP 服务器,或者设置您自己的真实 SMTP 服务器并在不进行身份验证的情况下对其进行配置。

标签: java email authentication smtp


【解决方案1】:

如果只是为了测试,可以试试Papercut。在运行时,Papercut 会自动接收发送到任何 IP 地址上标准 SMTP 端口 (25) 的电子邮件。您只需从您的应用程序发送邮件并切换到 Papercut 进行审查。

剪纸@github: https://github.com/ChangemakerStudios/Papercut/releases

import java.util.Date;
import java.util.Properties;

import javax.mail.Message.RecipientType;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMail {

    public static void main(String[] args) throws Exception {
        Properties props = new Properties();
        props.put("mail.smtp.host", "127.0.0.1");
        props.put("mail.smtp.port", "25");
        props.put("mail.debug", "true");
        Session session = Session.getDefaultInstance(props);
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress("admin@test.com"));
        message.setRecipient(RecipientType.TO, new InternetAddress("a@b.com"));
        message.setSubject("Notification");
        message.setText("Successful!", "UTF-8"); // as "text/plain"
        message.setSentDate(new Date());
        Transport.send(message);
    }

}

【讨论】:

  • 如果我想使用sendgrid apikey,我应该如何发送?
【解决方案2】:
import java.util.*;
import javax.mail.*;

public class SimpleEmail {

    public static void main(String[] args) {
        System.out.println("SimpleEmail Start");
        String smtpHostServer = "smtp.gmail.com";
        String toEmail = "XXXX@gmail.com";
        Properties props = System.getProperties();
        props.put("mail.smtp.host", smtpHostServer);
        props.put("mail.smtp.starttls.enable", true);
        props.put("mail.smtp.port", "25");
        Session session = Session.getDefaultInstance(props);
        try {
            MimeMessage msg = new MimeMessage(session);
            msg.addHeader("Content-type", "text/HTML; charset=UTF-8");
            msg.addHeader("format", "flowed");
            msg.addHeader("Content-Transfer-Encoding", "8bit");
            msg.setFrom(new InternetAddress("n91eply@gmail.com", "NoReply-JD"));
            msg.setReplyTo(InternetAddress.parse("n91eply@gmail.com", false));
            msg.setSubject("SimpleEmail Testing Subject", "UTF-8");
            msg.setText("SimpleEmail Testing Body", "UTF-8");
            msg.setSentDate(new Date());
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
            System.out.println("Message is ready");
            Transport.send(msg);
            System.out.println("EMail Sent Successfully!!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【讨论】:

  • 面临问题 com.sun.mail.smtp.SMTPSendFailedException: 530-5.7.0 需要身份验证。了解更多信息,请致电 530 5.7.0 support.google.com/mail/?p=WantAuthError o6sm1435614pgg.37 - gsmtp at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2249) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java :1740) 在 com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1239) 在 javax.mail.Transport.send0(Transport.java:255) 在 javax.mail.Transport.send(Transport.java: 124) 在 com.necti.smsemail.SimpleEmail.main(SimpleEmail.java:59)
【解决方案3】:

试试这个例子:

// File Name SendEmail.java

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

public class SendEmail
{
   public static void main(String [] args)
   {    
      // Recipient's email ID needs to be mentioned.
      String to = "abcd@gmail.com";

      // Sender's email ID needs to be mentioned
      String from = "web@gmail.com";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

通过:tutorialspoint

【讨论】:

  • 我忘了说我没有提供者。我最后需要一个提供商,我有 emailFrom 主题和消息,需要如何发送这封电子邮件?
  • 您看到答案末尾的链接了吗?我不太明白你在评论中的疑问?
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2015-11-23
  • 2020-08-04
  • 2014-12-05
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
相关资源
最近更新 更多