SMTP 身份验证用户名是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SMTP 身份验证用户名是啥相关的知识,希望对你有一定的参考价值。
您的邮箱账号!简单邮件传输协议(SMTP)是一种基于文本的电子邮件传输协议,是在因特网中用于在邮件服务器之间交换邮件的协议。SMTP是应用层的服务,可以适应于各种网络系统。
SMTP的命令和响应都是基于文本,以命令行为单位,换行符为CR/LF。响应信息一般只有一行,由一个3位数的代码开始,后面可附上很简短的文字说明。
SMTP
SMTP
SMTP要经过建立连接、传送邮件和释放连接3个阶段。具体为:
(1)建立TCP连接。
(2)客户端向服务器发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令。
(3)服务器端以OK作为响应,表示准备接收。
(4)客户端发送RCPT命令。
(5)服务器端表示是否愿意为收件人接收邮件。
(6)协商结束,发送邮件,用命令DATA发送输入内容。
(7)结束此次发送,用QUIT命令退出。
SMTP服务器基于DNS中的邮件交换(MX)记录路由电子邮件。电子邮件系统发邮件时是根据收信人的地址后缀来定位邮件服务器的。SMTP通过用户代理程序(UA)完成邮件的编辑、收取和阅读等功能;通过邮件传输代理程序(MTA)将邮件传送到目的地。 参考技术A 邮箱号本回答被提问者采纳
使用 AccountManager 令牌进行 IMAP/SMTP 身份验证
【中文标题】使用 AccountManager 令牌进行 IMAP/SMTP 身份验证【英文标题】:IMAP/SMTP authentication with AccountManager token 【发布时间】:2012-12-23 15:20:25 【问题描述】:我正在尝试使用从 Android 的 AccountManager 收到的令牌而不是使用用户名和密码来实现一个简单的 IMAP/SMTP gmail 客户端。 我正在尝试使用“mail”作为 getAuthToken() 的 authTokenType 参数。
Google 提供了这个带有 oauth2 的 SMTP/IMAP 示例 http://code.google.com/p/google-mail-oauth2-tools/source/browse/#svn%2Ftrunk%2Fjava%2Fcom%2Fgoogle%2Fcode%2Fsamples%2Foauth2 http://code.google.com/p/google-mail-oauth2-tools/wiki/JavaSampleCode
但它适用于 java。 在我的 Android 项目中使用它时缺少一些导入(关于 SASL)。为了解决它们,我使用这个库http://code.google.com/p/asmack/
示例编译,但我注意到运行时出现问题
10-04 10:05:44.715: I/System.out(1226): DEBUG: setDebug: JavaMail version 1.4.1
10-04 10:05:44.750: I/System.out(1226): DEBUG: mail.imap.fetchsize: 16384
10-04 10:05:44.750: I/System.out(1226): DEBUG: enable SASL
10-04 10:05:44.750: I/System.out(1226): DEBUG: SASL mechanisms allowed: XOAUTH2
10-04 10:05:46.137: I/System.out(1226): * OK Gimap ready for requests from 84.221.66.29 o42if871216eef.60
10-04 10:05:46.137: I/System.out(1226): A0 CAPABILITY
10-04 10:05:46.805: I/System.out(1226): * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2
10-04 10:05:46.805: I/System.out(1226): A0 OK Thats all she wrote! o42if871216eef.60
10-04 10:05:46.805: I/System.out(1226): IMAP DEBUG: AUTH: XOAUTH
10-04 10:05:46.805: I/System.out(1226): IMAP DEBUG: AUTH: XOAUTH2
10-04 10:05:46.813: I/System.out(1226): DEBUG: protocolConnect login, host=imap.gmail.com, user=xxx.xxx@gmail.com, password=<non-null>
10-04 10:05:46.813: I/dalvikvm(1226): Could not find method javax.security.sasl.Sasl.createSaslClient, referenced from method com.sun.mail.imap.protocol.IMAPSaslAuthenticator.authenticate
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to resolve static method 44358: Ljavax/security/sasl/Sasl;.createSaslClient ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljavax/security/auth/callback/CallbackHandler;)Ljavax/security/sasl/SaslClient;
10-04 10:05:46.813: D/dalvikvm(1226): VFY: replacing opcode 0x77 at 0x0050
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to resolve exception class 5975 (Ljavax/security/sasl/SaslException;)
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to find exception handler at addr 0x83
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejected Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator;.authenticate ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejecting opcode 0x0d at 0x0083
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejected Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator;.authenticate ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
10-04 10:05:46.844: W/dalvikvm(1226): Verifier rejected class Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator;
10-04 10:05:46.844: I/System.out(1226): IMAP DEBUG: Can't load SASL authenticator: java.lang.ClassNotFoundException: com.sun.mail.imap.protocol.IMAPSaslAuthenticator
10-04 10:05:46.844: I/System.out(1226): A1 LOGIN xxx.xxx@gmail.com anonymous
10-04 10:05:48.137: I/System.out(1226): A1 NO [AUTHENTICATIONFAILED] Invalid credentials (Failure)
10-04 10:05:48.164: W/System.err(1226): javax.mail.AuthenticationFailedException: [AUTHENTICATIONFAILED] Invalid credentials (Failure)
10-04 10:05:48.176: W/System.err(1226): at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:566)
10-04 10:05:48.176: W/System.err(1226): at javax.mail.Service.connect(Service.java:288)
10-04 10:05:48.176: W/System.err(1226): at xxx.xxx.xxx.OAuth2Authenticator.connectToImap(OAuth2Authenticator.java:111)
10-04 10:05:48.180: W/System.err(1226): at xxx.xxx.xxx.OAuth2Authenticator.initialize(OAuth2Authenticator.java:60)
10-04 10:05:48.180: W/System.err(1226): at xxx.xxx.xxx.TR_Incoming.onTimeout(TR_Incoming.java:106)
10-04 10:05:48.180: W/System.err(1226): at xxx.xxx.xxx.AlarmThread$1.handleMessage(AlarmThread.java:80)
10-04 10:05:48.180: W/System.err(1226): at android.os.Handler.dispatchMessage(Handler.java:99)
10-04 10:05:48.180: W/System.err(1226): at android.os.Looper.loop(Looper.java:137)
10-04 10:05:48.180: W/System.err(1226): at xxx.xxx.xxx.AlarmThread.run(AlarmThread.java:94)
似乎 asmack 使用 org.apache.harmony.javax.security.* 而不是 javax.security.*
有人遇到过这个问题吗? Google 在他们的示例中似乎没有考虑这种可能性,但我认为这应该是用户的共同特征。
谢谢。
【问题讨论】:
问题源于com.sun.mail.imap.protocol.IMAPSaslAuthenticator
引用了javax.security.sasl
缺少的类。您可能应该获取 javamail 的源,例如 from here,并将 IMAPSaslAuthenticator
中的导入更改为 org.apache.harmony.javax.security.sasl
类,在 asmack
中可用,如前所述。
【参考方案1】:
为了将 ASMACK Authenticator 与 JavaMail 一起使用,我创建了一个可用的库的修补版本:http://www.mannaz.at/codebase/imap-ssl-mail-android/
它基于http://code.google.com/p/javamail-android/,但支持 ASMACK SASSL 身份验证器。
JAR 文件中缺少此类。只需将其添加到您的源代码中:
package com.falott.ingresss.util;
public class Log
public static boolean loggingEnabled()
return false;
【讨论】:
您好,我按照您这边的说明进行操作,但是在调用connectToImap
时出现此错误:08-24 22:22:51.967: W/dalvikvm(31957): VFY: unable to resolve static method 4410: Lcom/falott/ingresss/util/Log;.loggingEnabled ()Z 08-24 22:22:51.967: W/dalvikvm(31957): VFY: unable to resolve static method 4410: Lcom/falott/ingresss/util/Log;.loggingEnabled ()Z
有什么想法吗?
是的,我忘了删除那个引用。只需在该包下的类中创建一个静态虚拟方法就可以了。
你好,我想用最新的 java 邮件重建补丁版本(修复一些 GMail / IMAP 错误)你能告诉我(我们)怎么做吗?
Mannaz,你能联系我吗?我想实现与您使用 ASMACK 身份验证器所做的相同的事情,但使用最新的 Java Mail。提前感谢【参考方案2】:
从日志来看,您似乎混淆了 java6 和 java7 文件。你能分享你的类路径详细信息吗?
另一种可能是您没有正确的凭据,登录或密码不正确。
我已经尝试过你所拥有的,它已经奏效了,应该是直截了当的。
【讨论】:
这里说的是安卓系统。 有没有可能是他拿错了邮件jar文件并包含在项目中? “找不到,仅在 java7 中”的类。还有他正在查看的示例,很可能不是 android 工作示例。它是一个java工作示例。我会怀疑..以上是关于SMTP 身份验证用户名是啥的主要内容,如果未能解决你的问题,请参考以下文章
使用配置文件的 MailSettings 进行 SMTP 身份验证
Laravel - 无法使用用户名在 SMTP 服务器上进行身份验证