【问题标题】:CDO works in VBScript, but doesn't work in C#CDO 在 VBScript 中工作,但在 C# 中不工作
【发布时间】:2017-05-04 21:13:54
【问题描述】:

我有一个 VBScript 文件来发送电子邮件它工作正常,但是当我创建一个具有相同 CDO 设置的 C# 程序 (.Net 4.5) 时

传输无法连接到服务器。

请检查我的 C# 有什么问题。

VBScript:

Dim objMessage
Set objMessage = CreateObject("CDO.Message") 

objMessage.Subject = Subj 
objMessage.From = Sender
objMessage.To = Receivers

objMessage.TextBody = Body 

objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = ServerName

objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 2

objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = ""
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = ""
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False

objMessage.Configuration.Fields.Update

objMessage.Send

C#:

using System.Net.Mail;
...
CDO.Message  objMessage   = new CDO.Message();

objMessage.Subject = Subj;
objMessage.From = Sender;

objMessage.To = Receivers;
objMessage.TextBody = Body;

ADODB.Field FieldSMTPSendUsing = objMessage.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"];
FieldSMTPSendUsing.Value = 2;

ADODB.Field FieldSMTPServer = objMessage.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserver"];
FieldSMTPServer.Value = ServerName; 

ADODB.Field FieldSMTPServerPort = objMessage.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"];
FieldSMTPServerPort.Value = 25;

ADODB.Field FieldSMTPconnectiontimeout = objMessage.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"];
FieldSMTPconnectiontimeout.Value =  60 ;

ADODB.Field FieldSMTPauthenticate = objMessage.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"];
FieldSMTPauthenticate.Value = 2;

ADODB.Field FieldSMTPsendusername = objMessage.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"];
FieldSMTPsendusername.Value = "";

ADODB.Field FieldSMTPsendpassword = objMessage.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"];
FieldSMTPsendpassword.Value = "";

ADODB.Field FieldSMTPusessl = objMessage.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/smtpusessl"];
FieldSMTPusessl.Value = false;

objMessage.Configuration.Fields.Update();

objMessage.Send();

【问题讨论】:

  • 您没有在 C# 代码中使用 CDO。
  • 你能解释一下吗?

标签: c# .net email vbscript


【解决方案1】:

不要在 C# 中使用 CDO。使用MailMessage 类编写消息,使用SmtpClient 类发送消息。

MailMessage message = new MailMessage(Sender, Receivers, Subj, Body);

SmtpClient client = new SmtpClient(ServerName);

try {
  client.Send(message);
} catch (Exception ex) {
  Console.WriteLine("Cannot send message.");
}

【讨论】:

  • 抱歉,CDO 出了什么问题?我们在 VBA/VBS/VB6 中使用了很长时间。
  • 对比两个代码sn-ps看不出来?
  • Afriad - 否 目前 CDO 是我们推荐的邮寄方式
  • 不管怎样,试运行MailMessage mail = new MailMessage(MailSender ,,MailReceivers); SmtpClient 客户端 = 新 SmtpClient();客户端.端口 = 25; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = false; client.Host = 我们的服务器; client.Credentials = new System.Net.NetworkCredential("", ""); mail.Subject = "这是一个测试。"; mail.Body = "测试邮件正文";客户端.发送(邮件);产生失败发送邮件
  • 在我删除第一条语句中的重复逗号后,对我来说效果很好。您确实定义了您正在使用 System.Net.Mail 命名空间,不是吗。
猜你喜欢
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2021-04-13
  • 2013-09-27
  • 2016-04-18
相关资源
最近更新 更多