Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javamail发送邮件时出现问题_Java_Email_Jakarta Mail - Fatal编程技术网

使用javamail发送邮件时出现问题

使用javamail发送邮件时出现问题,java,email,jakarta-mail,Java,Email,Jakarta Mail,我正在尝试使用javamail api向自己发送电子邮件。我已经正确地遵循了我在网上找到的代码,但我似乎无法让它工作。我得到的错误是: Exception in thread "main" javax.mail.AuthenticationFailedException: No authentication mechansims supported by both server and client 这是否意味着我的计算机不支持身份验证 public class Emails { p

我正在尝试使用javamail api向自己发送电子邮件。我已经正确地遵循了我在网上找到的代码,但我似乎无法让它工作。我得到的错误是:

Exception in thread "main" javax.mail.AuthenticationFailedException: No authentication mechansims supported by both server and client
这是否意味着我的计算机不支持身份验证

public class Emails 
{
    public static void main(String[] args) throws MessagingException
    {
        Emails e = new Emails();
        e.sendMail();
    }

    public void sendMail() throws MessagingException
    {
        boolean debug = false;
        String subject = "Testing";
        String message = "Testing Message";
        String from = "myemail@email.com";
        String[] recipients = {"myemail@email.com"};

        // create some properties and get the default Session
        Session session = getSession();
        session.setDebug(debug);

        // create a message
        Message msg = new MimeMessage(session);

        // set the from and to address
        InternetAddress addressFrom = new InternetAddress(from);
        msg.setFrom(addressFrom);

        InternetAddress[] addressTo = new InternetAddress[recipients.length]; 
        for (int i = 0; i < recipients.length; i++)
        {
            addressTo[i] = new InternetAddress(recipients[i]);
        }
        msg.setRecipients(Message.RecipientType.TO, addressTo);

        // Optional : You can also set your custom headers in the Email if you Want
        msg.addHeader("MyHeaderName", "myHeaderValue");

        // Setting the Subject and Content Type
        msg.setSubject(subject);
        msg.setContent(message, "text/plain");
        Transport.send(msg);
    }

    private Session getSession() 
    {
        Authenticator authenticator = new Authenticator();

        Properties properties = new Properties();
        properties.setProperty("mail.smtp.submitter", authenticator.getPasswordAuthentication().getUserName());
        properties.setProperty("mail.smtp.auth", "true");

        properties.setProperty("mail.smtp.host", "smtp.examplehost.com");
        properties.setProperty("mail.smtp.port", "25");

        return Session.getInstance(properties, authenticator);
    }

    private class Authenticator extends javax.mail.Authenticator 
    {
        private PasswordAuthentication authentication;

        public Authenticator() 
        {
            String username = "myusername";
            String password = "mypassword";
            authentication = new PasswordAuthentication(username, password);
        }

        protected PasswordAuthentication getPasswordAuthentication() 
        {
            return authentication;
        }
    }
}
公共类电子邮件
{
公共静态void main(字符串[]args)抛出MessaginException
{
电子邮件e=新电子邮件();
e、 sendMail();
}
public void sendMail()引发MessaginException
{
布尔调试=假;
字符串主题=“测试”;
String message=“测试消息”;
字符串from=”myemail@email.com";
字符串[]收件人={”myemail@email.com"};
//创建一些属性并获取默认会话
Session=getSession();
setDebug(debug);
//创建消息
Message msg=新的mimessage(会话);
//设置发件人和收件人地址
InternetAddress addressFrom=新的InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[]addressTo=新的InternetAddress[recipients.length];
for(int i=0;i
当我从这个服务器发送电子邮件时,我要做的是,通过ssh登录到服务器(login.server.com等),然后我可以从邮件服务器(smtp.server.com等)发送电子邮件。我需要用java来模拟它


已解决:使用SMTPSSLTTransport类确保您有一个smtp服务器(smtp.examplehost.com)来实际发送电子邮件。 确保您的smtp服务器允许“myemail@email.com“发送电子邮件


这些是标准smtp服务器进行的一些安全检查。

确保您有一个smtp服务器(smtp.examplehost.com)来实际发送电子邮件。 确保您的smtp服务器允许“myemail@email.com“发送电子邮件


这些是标准smtp服务器实施的一些安全检查。

这可能是您敲错了端口。我想您使用的是IMAP协议:对于通过SSL的IMAP,您必须连接到端口993,这可能是您选错了端口。我想您使用的是IMAP协议:对于通过SSL的IMAP,您必须连接到端口993。SMTPSSLTTransport解决了这个问题。SMTPSSLTTransport解决了这个问题。我遇到了同样的问题,但有一次在stackoverflow上没有找到答案@然而,JPC的回答提供了一个(非常小的)线索

从javamail 1.4.3开始(参见参考文献),javamail将拒绝通过未加密的通道发送纯文本凭证。因此,启用TLS传输是一种解决方案。另一种解决方案是尝试另一种身份验证方法(如果服务器支持),如NTLM或SASL。另一个解决方案是恢复到JavaMail 1.4.1,它在以明文形式发送凭据时没有问题。这样做的好处是代码不必更改。问题中的代码可以正常工作。缺点很明显,您是以明文形式发送凭据的,但是如果Exchange管理员允许……在我的情况下,邮件服务器不支持TLS,因此我别无选择

参考资料:

  • 发行说明:
  • JavaMail版本下载:
  • 线索是:

    • 我也有同样的问题,有一次在stackoverflow上找不到答案@然而,JPC的回答提供了一个(非常小的)线索

      从javamail 1.4.3开始(参见参考文献),javamail将拒绝通过未加密的通道发送纯文本凭证。因此,启用TLS传输是一种解决方案。另一种解决方案是尝试另一种身份验证方法(如果服务器支持),如NTLM或SASL。另一个解决方案是恢复到JavaMail 1.4.1,它在以明文形式发送凭据时没有问题。这样做的好处是代码不必更改。问题中的代码可以正常工作。缺点很明显,您是以明文形式发送凭据的,但是如果Exchange管理员允许……在我的情况下,邮件服务器不支持TLS,因此我别无选择

      参考资料:

      • 发行说明:
      • JavaMail版本下载:
      • 线索是:

      因此,通常当我想从此服务器发送电子邮件时,我必须通过SSH(login.server.com)登录。一旦我登录,传出服务器就是某个smtp.server.com。我想我需要在Java中模仿它,所以通常当我想从这个服务器发送电子邮件时,我必须通过SSH(login.server.com)登录。一旦我登录,服务器就会退出