我在Gmail上使用javamail进行imap搜索.我使用subjectTerm类创建一个searchTerm对象并传递给搜索函数.搜索适用于纯字母数字的主题字符串.只要我在搜索字符串中输入单引号或短划线,搜索就会失败.
IMAPSSLStore imapSslStore = connectToImap("imap.googlemail.com",993,email,oauthToken,oauthTokenSecret,getAnonymousConsumer(),true);
Folder inbox = imapSslStore.getFolder("[Gmail]/All Mail");
inbox.open(Folder.READ_ONLY);
SearchTerm sTerm = new SubjectTerm("String with quote's and da-sh"); //this fails
Message messages[] = inbox.search(sTerm); //no results found !
Run Code Online (Sandbox Code Playgroud)
是否有一种标准的方法来逃避搜索字符串或这是对gmail结束的限制?
我正在尝试使用OA提供的使用Zend Imap类的PHP示例代码进入带有OAuth的IMAP服务器,但我无法进行身份验证.Zend给了我错误:
Zend_Mail_Storage_Exception [ Error ]: cannot select INBOX, is this a valid transport?
Run Code Online (Sandbox Code Playgroud)
令人讨厌的是,这是一个相当混乱的错误消息,基本上是"无效的凭据".我怎么知道的?通过调试发送到IMAP套接字的实际命令,我看到:
string(44) "NO Invalid credentials ey9if1544983wid.142
"
Run Code Online (Sandbox Code Playgroud)
我尝试使用telnet和Ruby gmail_xoauth gem,这表明它不是代码问题,而是其他问题.
看看这一切的最基本水平,我得到这样的命令:
TAG1 AUTHENTICATE XOAUTH R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21h......etc
Run Code Online (Sandbox Code Playgroud)
这是我得到的地方NO Invalid credentials:
TAG2 SELECT "INBOX"
Run Code Online (Sandbox Code Playgroud)
这会回来BAD Unknown command并踢我.
我一直试图寻找有同样问题的人,但我发现只有问题,没有答案.有一些类似StackOverflow的问题:
一篇帖子显示有人在Python中遇到完全相同的问题.
这篇文章显示有人试图尴尬并用OAuth 2做,没有成功的报告.
还有就是建议"无效凭证"的错误可以通过将要解决的Gmail谷歌集团线程https://accounts.google.com/DisplayUnlockCaptcha对于Gmail帐户和https://www.google.com/a/ [YOURDOMAIN.COM]/UnlockCaptcha如果您使用的是Google Apps,但后者只是说我的用户名和密码错误,当他们显然没有.使用此https://accounts.google.com/DisplayUnlockCaptcha工作正常 - 即使我的帐户是托管应用程序,而不是普通的旧GMail - 但是当我尝试使用由提供的PHP示例代码重新登录时,我仍然会遇到相同的错误谷歌.
我尝试过使用各种托管的Google App帐户和一个简单的GMail帐户.我已经尝试将IMAP服务器从imap.gmail.com切换到imap.googlemail.com,没有任何区别.
/**
* Make the IMAP connection and send the auth request
*/
$imap = new …Run Code Online (Sandbox Code Playgroud) 使用下面的代码,我可以从中获取令牌AccountManager.我无法弄清楚如何在Android(Session,Store,Folder,..)的javamail(IMAP)api中使用此令牌?
我想使用客户经理对Gmail IMAP进行身份验证,我该如何进行此操作?
AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccounts();
manager.getAuthToken(accounts[0], "oauth2:https://mail.google.com/", null, this, new AccountManagerCallback<Bundle>(){
public void run(AccountManagerFuture<Bundle> future) {
try {
String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
} catch (OperationCanceledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AuthenticatorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, null);
Run Code Online (Sandbox Code Playgroud) 我想获得一个列表,列出我收件箱中任何邮件中包含的所有人.现在我可以使用javax邮件API通过IMAP连接并下载消息:
Folder folder = imapSslStore.getFolder("[Gmail]/All Mail");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();
for(int i = 0; i < messages.length; i++) {
// This causes the message to be lazily loaded and is slow
String[] from = messages[i].getFrom();
}
Run Code Online (Sandbox Code Playgroud)
行消息[i] .getFrom()比我想要的慢,因为导致消息被延迟加载.有什么办法可以加快速度吗?例如,我可以做一些批量加载而不是一个一个地加载消息吗?这是否会加载整个消息,是否我只能加载to/from/cc字段或标题?POP会比IMAP更快吗?
我正在使用gmail的IMAP API来搜索邮件.
我使用"OR"条件来搜索不同的关键字.如果我只去一个级别,就像这样的东西,那么效果很好
'UID SEARCH OR (FROM "somebody@email.com") (TO "somebody@email.com")'
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试更长的表达时,它不起作用
标准或标准或标准或标准
转换为(据我所知的语法)
'UID SEARCH OR ( OR (FROM "somebodyelse@email.com") (TO "somebodyelse@email.com")) ( OR (FROM "somebody@email.com") (TO "somebody@email.com"))'
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,我基本上希望从给定的电子邮件列表中发送或发送给所有邮件
我从libray得到的错误是
[ 'A34', 'BAD', 'Could', 'not', 'parse', 'command' ]
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我对 OAuth 和 Google 感到很困惑。我花了很长时间才获得 refresh_token 以创建新的 access_token。然后找出refresh_token也过期了??这有什么意义!!!?
我需要做的就是保留一个有效的 access_token 以与legato一起使用。
这是我手动输入终端以检索 OAUTH 代码的内容:
client = OAuth2::Client.new('GA_CLIENT_ID', 'GA_SECRET_KEY', {
:authorize_url => 'https://accounts.google.com/o/oauth2/auth',
:token_url => 'https://accounts.google.com/o/oauth2/token'
})
client.auth_code.authorize_url({
:scope => 'https://www.googleapis.com/auth/analytics.readonly',
:redirect_uri => 'http://localhost',
:access_type => 'offline',
:approval_prompt=> 'force'
})
Run Code Online (Sandbox Code Playgroud)
然后我在浏览器中手动输入输出的 url。我将返回的 OAUTH 代码导出为一个 env 变量并获取访问令牌:
access_token = client.auth_code.get_token(ENV['GA_OAUTH_CODE'], :redirect_uri => 'http://localhost')
Run Code Online (Sandbox Code Playgroud)
然后我可以访问 access_token 和 refresh_token:
begin
api_client_obj = OAuth2::Client.new(ENV['GA_CLIENT_ID'], ENV['GA_SECRET_KEY'], {:site => 'https://www.googleapis.com'})
api_access_token_obj = OAuth2::AccessToken.new(api_client_obj, ENV['GA_OAUTH_ACCESS_TOKEN'])
self.user = Legato::User.new(api_access_token_obj)
self.user.web_properties.first # this tests the access code and …Run Code Online (Sandbox Code Playgroud) 在 Gmail 上添加标签效果很好:
imap.store(item, '+X-GM-LABELS', label)
imap.expunge()
Run Code Online (Sandbox Code Playgroud)
但:
imap.store(item, '-X-GM-LABELS', label)
imap.expunge()
Run Code Online (Sandbox Code Playgroud)
...应该删除标签不会执行任何操作,不会返回错误(“确定”)。
去除标签的正确方法是什么?
我正在构建一个简单的Webmail,我想使用IMAP的CONDSTORE扩展名:它允许获取自日期以来发生更改的所有内容(消息,标志等),这对于将电子邮件客户端同步到IMAP服务器。
但是,我绝对不知道大多数IMAP服务器是否实际上支持此IMAP扩展。
那么,有没有什么资料可以告诉我该扩展的支持程度呢?例如,GMail或Hotmail是否支持它?
(这背后的隐藏问题很明显:CONDSTORE是将电子邮件客户端同步到IMAP服务器的最合适方法吗?我在本地存储电子邮件副本,这就是为什么我需要同步的原因)
这个代码snniped:
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,//read from client secret.json file
Scopes,
"user",
CancellationToken.None).Result;
// Create Gmail API service.
var service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
UsersResource.LabelsResource.ListRequest request = service.Users.Labels.List("me");
WatchRequest body = new WatchRequest()
{
TopicName = "projects/push-notifications-ver3/topics/mytopic",
LabelIds = new[] {"INBOX"}
string userId = "me";
UsersResource.WatchRequest watchRequest = service.Users.Watch(body, userId);
WatchResponse test = watchRequest.Execute();
Run Code Online (Sandbox Code Playgroud)
获取错误:将测试消息发送到Cloud PubSub项目/ push-notifications-ver3/topics/mytopic时出错:用户未被授权执行此操作.[403]
主题是通过订阅创建的,作为主题的所有者给予当前用户许可任何建议用户未授权的原因?
我想使用 imap 阅读完整的传入邮件。但 imap 只通知我收到的新邮件数量
imap.on('mail', (number) => {
console.log('got mails', number);
});
Run Code Online (Sandbox Code Playgroud)
有什么办法可以阅读收到的邮件吗?
任何帮助将不胜感激
gmail-imap ×10
imap ×8
gmail ×3
jakarta-mail ×3
android ×1
c# ×1
email-client ×1
gmail-api ×1
google-api ×1
java ×1
javax.mail ×1
oauth ×1
oauth-2.0 ×1
pop3 ×1
ruby ×1