Android javamail 501 5.5.4无效参数

Android javamail 501 5.5.4无效参数,java,android,jakarta-mail,mailgun,Java,Android,Jakarta Mail,Mailgun,我正试图用邮枪发送电子邮件。 根据mailgun的说法,我使用的代码如下: public static void TestMail() throws Exception { Properties props = System.getProperties(); props.put("mail.smtps.host","smtp.mailgun.org"); props.put("mail.debug", "true");

我正试图用邮枪发送电子邮件。 根据mailgun的说法,我使用的代码如下:

public static void TestMail() throws Exception
{

            Properties props = System.getProperties();
            props.put("mail.smtps.host","smtp.mailgun.org");
            props.put("mail.debug", "true");
            props.put("mail.verbose", "true");
            props.put("mail.smtps.auth","true");
            Session session = Session.getInstance(props, null);
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("fromaddress@gmail.com"));
            msg.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("toaddress@gmail.com", false));
            msg.setSubject("Hello");
            msg.setText("Testing some Mailgun awesomness");
            msg.setSentDate(new Date());
            SMTPTransport t =
                    (SMTPTransport)session.getTransport("smtps");
            t.setStartTLS(true);
            t.connect("smtp.mailgun.com", "postmaster@sandbox86837*********.mailgun.org", "b071d**********");
            t.sendMessage(msg, msg.getAllRecipients());
            System.out.println("Response: " + t.getLastServerResponse());
            t.close();


}
我正在使用从以下网站下载的javamail api:

现在,在调试中显示以下信息:

DEBUG: JavaMail version 1.4.1
DEBUG: not loading file: /system/lib/javamail.providers
DEBUG: java.io.FileNotFoundException: /system/lib/javamail.providers: open failed: ENOENT (No such file or directory)
DEBUG: not loading resource: /META-INF/javamail.providers
 DEBUG: not loading resource: /META-INF/javamail.default.providers
DEBUG: failed to load any providers, using defaults

DEBUG: not loading resource: /META-INF/javamail.default.address.map
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.address.map
DEBUG: not loading file: /system/lib/javamail.address.map
 DEBUG: java.io.FileNotFoundException: /system/lib/javamail.address.map: open failed: ENOENT (No such file or directory)
DEBUG: failed to load address map, using defaults
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc.,1.4.1]
DEBUG SMTP: useEhlo true, useAuth true


DEBUG SMTP: trying to connect to host "smtp.mailgun.com", port 465, isSSL true
220 ak47 ESMTP ready
DEBUG SMTP: connected to host "smtp.mailgun.com", port: 465
EHLO
501 5.5.4 Invalid argument
 HELO
501 5.5.4 Invalid argument
我不知道这个错误是什么意思?当我在谷歌上搜索时,没有人指出错误的确切原因或原因。可能是ssl,或者我的系统缺少一些java库??或者我下载的java库不正确

但正如您在调试中看到的,它能够成功连接到smtp.mailgun.com。那么为什么会出现这种错误呢? 请帮帮我


谢谢

您所连接的服务器要求
HELO
EHLO
的参数为主机名或IP地址

您的代码似乎也没有发送

RFC(第29页)似乎有点模棱两可

…如果没有可用的主机名,客户端应发送IP地址

如果这是一项要求,那么这个词肯定会被使用。 但是
HELO
/
EHLO
的语法描述似乎表明该参数是必需的

同样在第3.6节(关于域):

  • EHLO命令中给出的域名必须是主域名或 主机名(解析为RR的域名)或 没有名称,地址文字如第4.1.1.1节所述

您所连接的服务器要求
HELO
EHLO
的参数为主机名或IP地址

您的代码似乎也没有发送

RFC(第29页)似乎有点模棱两可

…如果没有可用的主机名,客户端应发送IP地址

如果这是一项要求,那么这个词肯定会被使用。 但是
HELO
/
EHLO
的语法描述似乎表明该参数是必需的

同样在第3.6节(关于域):

  • EHLO命令中给出的域名必须是主域名或 主机名(解析为RR的域名)或 没有名称,地址文字如第4.1.1.1节所述

所以,我终于可以用邮枪发邮件了。但我不得不放弃使用JAVAMAIL发送的想法,因为我无法解决无效参数的问题

改装提供了一个使用邮枪发送电子邮件的类。我在这里为任何面临邮枪问题的人发布了我使用的代码:

public interface SendMailApi {
@Headers({ACCEPT_JSON_HEADER})
@FormUrlEncoded
@POST("/messages")
void authUser(
        @Header("Authorization") String authorizationHeader,
        @Field("from") String from,
        @Field("to") String to,
        @Field("subject") String subject,
        @Field("text") String text,
        Callback<MailGunResponse> cb
);
公共接口SendMailApi{
@标题({ACCEPT_JSON_HEADER})
@FormUrlEncoded
@POST(“/消息”)
无效授权用户(
@标题(“授权”)字符串authorizationHeader,
@字段(“发件人”)字符串发件人,
@字段(“to”)字符串到,
@字段(“主题”)字符串主题,
@字段(“文本”)字符串文本,
回叫cb
);
}

public void sendMail(字符串收件人、字符串主题、字符串消息、回调cb){
字符串from=“test”;
字符串clientandsecret=“api”+:“+”键-********”;
String authorizationHeader=BASIC+“”+Base64.encodeToString(clientandsecret.getBytes(),Base64.NO_-WRAP);
authUser(authorizationHeader,from,to,subject,msg,cb);
}
公共邮枪(){
RestAdapter RestAdapter=getAuthAdapter();
sendMailApi=restAdapter.create(sendMailApi.class);
}
私有RestAdapter getAuthAdapter(){
RestAdapter.LogLevel LogLevel=RestAdapter.LogLevel.FULL;
如果(调试)日志级别=RestAdapter.logLevel.FULL;
返回新的RestAdapter.Builder()
.setEndpoint(端点)
.setConverter(新的GsonConverter(新的Gson()))
.setLogLevel(日志级别)
.build();
}

所以,我终于能够使用邮枪发送邮件了。但我不得不放弃使用JAVAMAIL发送的想法,因为我无法解决无效参数的问题

改装提供了一个使用邮枪发送电子邮件的类。我在这里为任何面临邮枪问题的人发布了我使用的代码:

public interface SendMailApi {
@Headers({ACCEPT_JSON_HEADER})
@FormUrlEncoded
@POST("/messages")
void authUser(
        @Header("Authorization") String authorizationHeader,
        @Field("from") String from,
        @Field("to") String to,
        @Field("subject") String subject,
        @Field("text") String text,
        Callback<MailGunResponse> cb
);
公共接口SendMailApi{
@标题({ACCEPT_JSON_HEADER})
@FormUrlEncoded
@POST(“/消息”)
无效授权用户(
@标题(“授权”)字符串authorizationHeader,
@字段(“发件人”)字符串发件人,
@字段(“to”)字符串到,
@字段(“主题”)字符串主题,
@字段(“文本”)字符串文本,
回叫cb
);
}

public void sendMail(字符串收件人、字符串主题、字符串消息、回调cb){
字符串from=“test”;
字符串clientandsecret=“api”+:“+”键-********”;
String authorizationHeader=BASIC+“”+Base64.encodeToString(clientandsecret.getBytes(),Base64.NO_-WRAP);
authUser(authorizationHeader,from,to,subject,msg,cb);
}
公共邮枪(){
RestAdapter RestAdapter=getAuthAdapter();
sendMailApi=restAdapter.create(sendMailApi.class);
}
私有RestAdapter getAuthAdapter(){
RestAdapter.LogLevel LogLevel=RestAdapter.LogLevel.FULL;
如果(调试)日志级别=RestAdapter.logLevel.FULL;
返回新的RestAdapter.Builder()
.setEndpoint(端点)
.setConverter(新的GsonConverter(新的Gson()))
.setLogLevel(日志级别)
.build();
}

我建议您使用RESTful API,而不是SMTP传统后端。您可以使用Jersey图书馆和Mailgun的官方文档,其中提供了准确的示例


此外,还有一个重要的免责声明,我最近发布了一个Java Mailgun库来简化这一点。请参阅。

我建议您使用RESTful API而不是SMTP旧版后端。您可以使用Jersey图书馆和Mailgun的官方文档,其中提供了准确的示例


此外,还有一个重要的免责声明,我最近发布了一个Java Mailgun库来简化这一点。请参阅。

如果JavaMail没有发送主机地址,那是因为JDK,呃,Android非Java运行时无法识别主机的名称。可以将设置为要在HELO/EHLO命令中使用的主机名。也,