我编写了一个小应用程序,它应该自动处理来自公用文件夹的电子邮件.对于每封电子邮件,我们希望在数据库中保存一些元数据.
我想使用ItemID来建立此元数据和特定电子邮件之间的链接,我刚刚发现此ItemId不是常量.例如,如果电子邮件从公用文件夹移动到另一个文件夹,它将收到另一个ItemId.这意味着,电子邮件和相关元数据之间的链接将丢失.
所以,问题是,如何在元数据和特定电子邮件之间建立链接?
尝试在JavaMail中使用NTLM连接到Exchange服务器.我可以连接到SMTP,但不能连接到IMAP.我还可以使用相同的主机/用户名/密码,帐户类型="IMAP",端口143,ssl = false,身份验证= NTLM,域名=""通过OS X Mail.app应用程序进行身份验证.
连接代码:
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Store;
import java.util.Properties;
public class NTLMTest {
public static void main(String[] args) throws Exception {
final String host = "example.com";
final String user = "bob";
final String password = "password";
final Properties properties = new Properties();
Session session = Session.getDefaultInstance(properties);
session.setDebug(true);
// SMTP CONNECT
final Transport transport = session.getTransport("smtp");
transport.connect(host, user, password);
System.out.println("SMTP Connect successful");
// IMAP CONNECT
final Store store = session.getStore("imap");
store.connect(host, user, password);
System.out.println("IMAP Connect …Run Code Online (Sandbox Code Playgroud) 我们的电子邮件服务器上有点麻烦,权限在我们的用户电子邮件文件夹中失败了.
不幸的是,我们的用户都在Outlook Web Access上,并且无权更改其电子邮件文件夹的权限.
我的任务是公开更改Exchange电子邮件文件夹权限的功能.我的计划是以某种方式与Exchange交互并将相关信息放在ASP.Net网页中.
我看到有一个Exchange Web服务DLL但是我不确定我们的安装是否启用了它.还有另一种与Exchange通信的方式吗?最好使用C#?如果关闭Web服务是否容易打开?如何检查它是否打开?
问候,
编辑:我尝试通过EWS连接,但我得到Error 102 (net::ERR_CONNECTION_REFUSED): Unknown error.这可能是因为我没有权限或服务没有打开.我要调查一下.谢谢你的建议.
好吧,看起来我有错误的URI.我现在得到一个"Exchange Server不支持所请求的版本." (我只是想发送测试电子邮件)
我正在尝试从PHP执行powershell脚本,但它似乎不起作用.
脚本'newEvent.ps1'在Exchange服务器上创建一个事件.
$psPath = "powershell.exe";
$psDIR = "C:\\wamp\\www\\ant\\assets\\ps\\";
$psScript = "newEvent.ps1";
$runScript = $psDIR. $psScript;
$runCMD = $psPath." ".$runScript." 2>&1";
echo "\$psPath $psPath <br>";
echo "\$psDIR $psDIR <br>";
echo "\$psScript $psScript <br>";
echo "\$runScript $runScript <br>";
echo "\$runCMD $runCMD <br>";
exec( $runCMD,$out,$ret);
echo "<pre>";
print_r($out);
print_r($ret);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)
它输出:
$psPath powershell.exe
$psDIR C:\wamp\www\ant\assets\ps\
$psScript newEvent.ps1
$runScript C:\wamp\www\ant\assets\ps\newEvent.ps1
$runCMD powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1 2>&1
Array
(
[0] => File C:\wamp\www\ant\assets\ps\newEvent.ps1 cannot be loaded because the execut
[1] => ion of scripts is disabled …Run Code Online (Sandbox Code Playgroud) 我知道如何使用安装在同一台机器上的outlook发送邮件,我正在运行我的代码.现在,这里的要求是访问我的组织的Exchange服务器(Microsoft OWA),以便在asp.net代码中发送邮件.
可能吗?如果是,那么请扔掉一些光.
日Thnx
UPDATE
得到了解决方案.在这里为任何想要帮助的人发布我的工作代码.快乐的编码!
protected void Button1_Click(object sender, EventArgs e)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
//service.AutodiscoverUrl("youremailaddress@yourdomain.com");
service.Url = new Uri("https://yourwebmailaddress.com/ews/Exchange.asmx");
service.UseDefaultCredentials = true;
//service.Credentials = new WebCredentials("username", "password");
EmailMessage message = new EmailMessage(service);
message.Subject = "My auto mail from exchange server";
message.Body = "hi everyone !";
message.ToRecipients.Add("brad.pitt@hollywood.com");
message.Save();
message.SendAndSaveCopy();
Label1.Text = "Success !";
}
Run Code Online (Sandbox Code Playgroud)
另一个问题:如何使用microsoft exchange 2003?那里不支持coz EWS.请更新任何想法......?
所以我有这个非常基本的程序,试图发送电子邮件,但我一直在
信箱不可用.服务器响应为:5.7.1客户端无权作为此发件人发送
这是我的计划
static void Main(string[] args)
{
SmtpClient client = new SmtpClient("Server", 25);
client.UseDefaultCredentials = false;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Credentials = new NetworkCredential("UserName", "Password");
client.Send(new MailMessage("kevin@hopethisworks.com","Recipient"));
}
Run Code Online (Sandbox Code Playgroud)
我知道凭据有效,如果我使用相同的数据运行SMTP Test Tool 3.0一切都很好.

以下是在Exchange服务器上为我的IP设置的接收连接器的一些屏幕截图


任何人都有任何想法会在我的代码中导致此错误,但不是在简单的SMTP测试工具中?我在某处遗漏了某种身份验证选项吗?我有四重检查所有信息在两个地方都是正确和相同的,它在工具中工作,但在代码中不起作用.
我有以下代码,用于在加载Exchange 2010快照时创建PowerShell运行空间.
Dim runspaceConfig = RunspaceConfiguration.Create()
Dim snapInException As PSSnapInException = Nothing
runspaceConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", snapInException)
Dim runspace = RunspaceFactory.CreateRunspace(runspaceConfig)
runspace.Open()
Run Code Online (Sandbox Code Playgroud)
自安装Visual Studio 2012后,我在执行将管理单元添加到runspace配置的行时开始出现以下错误.
System.Management.Automation.Runspaces.PSSnapInException occurred
HResult=-2146233087
Message=Cannot load Windows PowerShell snap-in Microsoft.Exchange.Management.PowerShell.E2010 because of the following error: The type initializer for 'Microsoft.Exchange.Data.Directory.Globals' threw an exception.
Source=System.Management.Automation
WasThrownFromThrowStatement=False
StackTrace:
at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadCustomPSSnapIn(PSSnapInInfo mshsnapinInfo)
at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadPSSnapIn(PSSnapInInfo mshsnapinInfo)
at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadPSSnapIn(PSSnapInInfo mshsnapinInfo, PSSnapInException& warning)
at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.DoAddPSSnapIn(String name, PSSnapInException& warning)
at System.Management.Automation.Runspaces.RunspaceConfiguration.AddPSSnapIn(String name, PSSnapInException& warning)
Run Code Online (Sandbox Code Playgroud)
我已经能够确认nlog在某种程度上导致了这个问题.在创建powershell运行空间之前创建nlog记录器的组合会导致错误.
如果我从我的应用程序配置中删除nlog配置部分并只创建一个空的nlog记录器,则加载管理单元时没有错误.此外,如果我将nlog配置保留在我的应用程序配置中但不创建nlog记录器,则该管理单元也会成功加载.
如果有人能提供任何可以帮我解决这个问题的建议,我会很高兴.
谢谢
我正在构建一个应用程序,用于同步用户的Exchange Server帐户(支持的版本2007-2013)和应用程序之间的数据.
应用程序不能使用模拟(至少不在典型情况下),因为用户可以在任意数量的域和交换服务器上.
我知道我最初不得不要求他们的用户名/电子邮件地址和密码.但是,如果我不需要,我真的不想负责存储这些凭据(即使它们是加密的,我宁愿不加密).
我不确定要问什么问题,所以我要跟这些:
Exchange Server如何进行身份验证?用户的凭据是否按原样直接发送到服务器,还是在通过网络发送之前进行了哈希处理?如果它们被散列,我如何获得/生成此哈希以便在连续的身份验证中重用?
Exchange Server是否发送某种可以在以后重复使用的身份验证令牌(永远,直到密码更改或失效)?
如果您知道该问题的解决方案,这些问题的答案无法解决,请改为提供.
我已经实现了一个通过.Net SmtpClient发送电子邮件的服务器.邮件发送代码如下:
private static MailMessage SendMail(string to, string subject, string body)
{
MailMessage mailToSend = new MailMessage();
mailToSend.Body = body;
mailToSend.Subject = subject;
mailToSend.IsBodyHtml = true;
mailToSend.To.Add(to);
try
{
mailClient.Send(mailToSend);
}
catch (Exception ex)
{
//Log data...
}
mailToSend.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
在Web.config我已经把邮件的凭据,像这样:
<configuration>
<system.net>
<mailSettings>
<smtp from="autoemail@mailserver.org">
<network host="smtp.mailserver.org" password="pswdpswd" port="25" userName="autoemail" clientDomain="the-domain" enableSsl="true" />
</smtp>
</mailSettings>
</system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
电子邮件成功发送,一切正常,但当我登录交换服务器中的电子邮件用户时(例如通过Outlook Web-App)我看不到通过SmtpClient发送的邮件(通过代码)发送的项目夹.
如何在此文件夹中保留已发送邮件的副本?谢谢!
是否可以访问除登录用户之外的其他Exchange帐户的文件夹和项目?
我可以通过Exchange Web服务托管API执行此操作吗?
c# exchange-server web-services exchangewebservices ews-managed-api
exchange-server ×10
c# ×7
.net ×2
email ×2
powershell ×2
api ×1
asp.net ×1
jakarta-mail ×1
java ×1
nlog ×1
ntlm ×1
php ×1
shell-exec ×1
smtpclient ×1
web-services ×1