我想通过 Javamail API (1.4.5) 使用带有普通登录的 IMAP(s) 访问共享邮箱(非文件夹)。邮件服务器是 Exchange Server 2010。
用户:user1 (user1@domain.com) 密码:xxxx
共享邮箱:shared_MB@domain.com
我设法访问了 user1 - 邮箱:
Session session = Session.getInstance(properties, new ExchangeAuthenticator(username, password));
session.setDebug(true);
Store store = session.getStore("imaps");
store.connect(imapHost, username, password);
Run Code Online (Sandbox Code Playgroud)
特性:
mail.imaps.socketFactory.port = 993
mail.imaps.starttls.enable = true
mail.imaps.socketFactory.class = javax.net.ssl.SSLSocketFactory
mail.imaps.socketFactory.fallback = false
用户名 = user1@domain.com
密码 = xxxx
--> 这很好用!但是现在我想通过更改登录字符串来访问附加邮箱:
用户名=user1@domain.com/shared_MB
--> 不幸的是,我收到一条“NO AUTHENTICATE”消息:
DEBUG IMAP: AUTHENTICATE PLAIN command result: A1 NO AUTHENTICATE failed.
Run Code Online (Sandbox Code Playgroud)
我能够使用 Thunderbird 访问,所以我认为我的代码中缺少一些东西......
我正在尝试通过 Windows Powershell 从远程 Exchange 服务器接收所有 TransportAgent 的状态。
我偶尔会收到一个错误,即The session state is Broken. 一旦它坏了,我需要创建一个新的会话
下面是我正在使用的命令列表(按正确顺序)
# Build the PSSession for Exchange
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<SERVER>/PowerShell/ -Authentication Default
# Invoke the command 'Get-TransportAgent' on the remote PSSession
Invoke-Command $Session {Get-TransportAgent}
# Result when there is NO ERROR
Identity Enabled Priority PSComputerName
-------- ------- -------- --------------
Transport Rule Agent True 1 <SERVER>
Malware Agent True 2 <SERVER>
Text Messaging Routing Agent True 3 <SERVER>
Text Messaging Delivery …Run Code Online (Sandbox Code Playgroud) package jmail;
import java.util.Date; import java.util.Properties;
import javax.mail.Authenticator; import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class HtmlJavaSend {
public void sendHtmlEmail(String host, String port,
final String userName, final String password, String toAddress,
String subject, String message) throws AddressException,
MessagingException {
// sets SMTP server properties
Properties properties = new Properties();
properties.put("mail.man.com", host);
properties.put("mail.25", port);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.ssl.trust","mail.man.com");
// creates a new session with an authenticator
Authenticator auth = …Run Code Online (Sandbox Code Playgroud) 将 EWS 托管 API 与 Office 365 一起使用(ExchangeVersion.Exchange2013_SP1 配置文件)。当为父文件夹调用 Folder.FindFolders 时,对于所有返回的 Folder 对象(包括众所周知的文件夹,如收件箱),我将 Folder.WellKnownFolderName 值设为 null。.TotalCount 之类的其他值很好。
MSDN 中的 Folder.WellKnownFolderName 文档指出它应该适用于 Exchange2013 及更高版本,我相信 Office 365 符合此标准。
此外,如果我连接到 Exchange 2010 服务器并设置 ExchangeVersion.Exchange_2010 配置文件,.WellKnownFolderName 将引发异常而不是返回 null(这是预期的行为)。因此(以我的理解),根据版本,它应该为 Inbox 等知名文件夹抛出异常或返回非空值。
我错过了什么吗?
或者我应该使用其他方法来确定系统文件夹,如收件箱、已发送邮件等?
在我的脚本中,我希望将 Exchange Online 通讯组成员添加到我的阵列中$members_id。
Get-DistributionGroupMember我想在远程服务器上运行 cmdlet,所以它看起来像这样:
Invoke-Command -Session $Session -ScriptBlock {
$members_id = Get-DistributionGroupMember -Identity "power_shell_test"
} -ArgumentList $members_id
Run Code Online (Sandbox Code Playgroud)
运行后我得到一个错误:
此运行空间不支持该语法。如果运行空间处于无语言模式,则可能会发生这种情况。
当我删除$members_id =它时运行良好。
如果您知道为什么会这样,请告诉我。
从Java应用程序与Exchange 2003服务器通信可能有哪些选择?我听过一些对Java提供.NET服务的项目的引用.我想我也听说过有关Exchange 2007暴露Web服务的一些内容,但我不确定它是否可以在2003年使用.
有没有人这样做过?有什么建议?
编辑:通过"与...交谈"我并不仅仅意味着获取消息,我可以通过IMAP来做...我的意思是访问更具特定于Exchange的内容,例如联系人.
我是MS Exchange的新手,我显然在安装过程中出现了一些错误,现在当我尝试打开Exchange管理控制台并单击左侧的Microsoft Exchange内部部署树项时,出现以下错误:"[servername.domainname.com]连接到远程服务器失败,并显示以下错误消息:WinRM客户端无法在指定的时间内完成操作.检查计算机名称是否有效且可以访问...."
我知道servername是错误的,那么如何更改它并让Exchange管理控制台默认自动连接到正确的服务器?
我想创建一个函数,它将按以下方式解码一个单词:第一个元音与最后一个元音交换,第二个元素与倒数第二个交换等.我想用辅音做同样的事情.最后它将返回解码的单词.
这是我的元音代码的开头:
def decode(w):
for i in range(len(w)):
for j in range(len(w[::-1])):
if (i[0] in 'aeiouy' and j[0] in 'aeiouy'):
s[i],s[j]=s[j],s[i]
return w
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何交换这封信.
例如:我给了一个词:'星期六'我的功能给了'dyratsua'回来
我想获取指定邮箱列表的所有权限列表.
要获得只有一个的所有权限,我可以这样做:
Get-MailboxPermission -Identity "Mailbox01"
Run Code Online (Sandbox Code Playgroud)
如果我想一次获取多个邮箱的权限列表,该怎么办?
就像是:
Get-MailboxPermission -Identity "Mailbox01","Mailbox02","Mailbox03"
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做 - 在一个列表中?
任何人都可以向我解释我所看到的差异,或者使用|一个命令将一个命令传递给另一个命令,或者用$一种不同的方式"管道"它(很抱歉不确定该用途$是否实际上考虑了管道).
所以...这有效:
Get-Mailbox -ResultSize Unlimited |
where { $_.RecipientTypeDetails.tostring() -eq "SharedMailbox" } |
Get-MailboxPermission
Run Code Online (Sandbox Code Playgroud)
哪个很棒,但是因为我想在上面的命令之后放置另一个命令,Get-MailboxPermission然后尝试使用它:
$Mailbox = Get-Mailbox -ResultSize Unlimited |
where { $_.RecipientTypeDetails.tostring() -eq "SharedMailbox" }
Get-MailboxStatistics -Identity $Mailbox |
where { $_.IsInherited.tostring() -eq "False" }
Run Code Online (Sandbox Code Playgroud)
它导致我得到这个错误:
无法处理参数'Identity'上的参数转换.无法将类型为"System.Collections.ArrayList"的"System.Collections.ArrayList"值转换为"Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter".
肯定使用|或者$是相同的,因为它将结果传递给下一个命令,或者我完全错了?
exchange-server ×10
powershell ×4
jakarta-mail ×2
java ×2
.net ×1
c# ×1
console ×1
decode ×1
managed-ews ×1
office365 ×1
pipe ×1
python ×1
ssl ×1
starttls ×1