使用java发送邮件

使用java发送邮件,java,jakarta-mail,Java,Jakarta Mail,我正在尝试从域发送邮件,但遇到一些错误 代码: 错误: javax.mail.AuthenticationFailedException:服务器和客户端都不支持任何身份验证机制 在com.sun.mail.smtp.SMTPTransport.authenticate上(SMTPTransport.java:756) 在com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:669)上 在javax.mail.Serv

我正在尝试从域发送邮件,但遇到一些错误

代码: 错误: javax.mail.AuthenticationFailedException:服务器和客户端都不支持任何身份验证机制 在com.sun.mail.smtp.SMTPTransport.authenticate上(SMTPTransport.java:756) 在com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:669)上 在javax.mail.Service.connect(Service.java:313) 在javax.mail.Service.connect(Service.java:172) 在javax.mail.Service.connect(Service.java:121) 在javax.mail.Transport.send0(Transport.java:190) 在javax.mail.Transport.send(Transport.java:120)
在SendingClass.sendmail.main(sendmail.java:63)中,您很可能需要启用SSL/TLS,然后服务器才允许您登录。根据服务器的要求,将属性或设置为
true


此外,您还需要清理其中的一些。在服务器允许您登录之前,您很可能需要启用SSL/TLS。根据服务器的要求,将属性或设置为
true


此外,您还需要清理其中的一些。这会更好吗?这是我的一个Java应用程序中的一个简化示例,希望我没有引入copypaste语法错误。它看起来与您的代码相似,但没有多少额外的smtp道具

Properties prop = new Properties();
prop.put("mail.smtp.allow8bitmime", "true");
prop.put("mail.smtp.timeout", "60000");
prop.put("mail.smtp.connectiontimeout", "60000");
prop.put("mail.smtp.host", "smtp.gmail.com");
prop.put("mail.smtp.port", "465");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.socketFactory.port", "465");
prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.put("mail.smtp.from", "myname@gmail.com");

final String username = "myname";
final String pwd      = "mypwd";
Session session = Session.getInstance(prop,
  new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, pwd);
    }
  }
);

Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress( (String)prop.get("mail.smtp.from") ));
((MimeMessage)msg).setSubject("My email title ÅÄÖ", "UTF-8");
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("other@world.com", false));

Multipart mp = new MimeMultipart();
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText("This is a body text ÅÄÖ", "UTF-8");
mp.addBodyPart(mbp1);
msg.setContent(mp);

Transport tr = session.getTransport("smtp");
tr.connect();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();

这有更好的表现吗?这是我的一个Java应用程序中的一个简化示例,希望我没有引入copypaste语法错误。它看起来与您的代码相似,但没有多少额外的smtp道具

Properties prop = new Properties();
prop.put("mail.smtp.allow8bitmime", "true");
prop.put("mail.smtp.timeout", "60000");
prop.put("mail.smtp.connectiontimeout", "60000");
prop.put("mail.smtp.host", "smtp.gmail.com");
prop.put("mail.smtp.port", "465");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.socketFactory.port", "465");
prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.put("mail.smtp.from", "myname@gmail.com");

final String username = "myname";
final String pwd      = "mypwd";
Session session = Session.getInstance(prop,
  new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, pwd);
    }
  }
);

Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress( (String)prop.get("mail.smtp.from") ));
((MimeMessage)msg).setSubject("My email title ÅÄÖ", "UTF-8");
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("other@world.com", false));

Multipart mp = new MimeMultipart();
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText("This is a body text ÅÄÖ", "UTF-8");
mp.addBodyPart(mbp1);
msg.setContent(mp);

Transport tr = session.getTransport("smtp");
tr.connect();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();

客户端和服务器都支持身份验证机制吗?尝试在不使用用户名和密码的情况下使用connect方法客户端和服务器都支持身份验证机制吗?尝试在不使用用户名和密码的情况下使用connect方法解释实际问题将比代码转储更进一步。@Makoto:是的,这是一个问题,对吗?我的答案是给更多的道具例子来尝试一下。JavaMail有时是一种黑魔法,我在这里不是要宣布一个最终的答案,只是供程序员尝试的食物。我的代码在其他几家公司都有效。这毕竟是Stackoverflow。我最喜欢的是一个权威性的答案,解释为什么可以返回特定的错误,而不是一些应该“正常工作”的代码来解决这个问题。解决问题是一回事,但在这种情况下,了解问题的来源更有价值。因此,代码转储对我来说似乎没有那么大的价值。其他人可能会觉得它值得,但我看不出它的价值。@Makoto:注意到你的意见,谢谢。让原始海报看看它如何适合他/她的场景,如果问题没有消失,请提供更多信息。我们可以迭代地找到解决方案。解释实际问题将比代码转储更进一步。@Makoto:是的,这是一个已经在问题中解释过的问题,对吗?我的答案是给更多的道具例子来尝试一下。JavaMail有时是一种黑魔法,我在这里不是要宣布一个最终的答案,只是供程序员尝试的食物。我的代码在其他几家公司都有效。这毕竟是Stackoverflow。我最喜欢的是一个权威性的答案,解释为什么可以返回特定的错误,而不是一些应该“正常工作”的代码来解决这个问题。解决问题是一回事,但在这种情况下,了解问题的来源更有价值。因此,代码转储对我来说似乎没有那么大的价值。其他人可能会觉得它值得,但我看不出它的价值。@Makoto:注意到你的意见,谢谢。让原始海报看看它如何适合他/她的场景,如果问题没有消失,请提供更多信息。我们可以迭代地找到解决方案。我添加了但获取错误“javax.mail.MessaginException:无法连接到SMTP主机:chnmail.hcl.com,端口:25;”我添加了但获取错误“javax.mail.MessaginException:无法连接到SMTP主机:chnmail.hcl.com,端口:25;”
Properties prop = new Properties();
prop.put("mail.smtp.allow8bitmime", "true");
prop.put("mail.smtp.timeout", "60000");
prop.put("mail.smtp.connectiontimeout", "60000");
prop.put("mail.smtp.host", "smtp.gmail.com");
prop.put("mail.smtp.port", "465");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.socketFactory.port", "465");
prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.put("mail.smtp.from", "myname@gmail.com");

final String username = "myname";
final String pwd      = "mypwd";
Session session = Session.getInstance(prop,
  new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, pwd);
    }
  }
);

Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress( (String)prop.get("mail.smtp.from") ));
((MimeMessage)msg).setSubject("My email title ÅÄÖ", "UTF-8");
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("other@world.com", false));

Multipart mp = new MimeMultipart();
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText("This is a body text ÅÄÖ", "UTF-8");
mp.addBodyPart(mbp1);
msg.setContent(mp);

Transport tr = session.getTransport("smtp");
tr.connect();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();