1

我一直在漫游论坛,但没有找到任何问题的答案。所有的解决方案(和问题)都是关于使用Microsoft.Office.Interop.Outlook; 出于某种原因,我不允许使用任何 office.interop.

我什至尝试过:

MailAddress fromAddress = new MailAddress("sender@server.com");
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.From = fromAddress;
message.To.Add("receiver@theirServer.com");
message.CC.Add("receiver2@theirServer.com");
message.Subject = "theSubject";
message.Body = "TheBody";

SmtpClient smtpClient = new SmtpClient("zzz.server.xxx");
smtpClient.Credentials = new NetworkCredential("sender@server.com", "password");

smtpClient.Send(message);

即使在我硬编码密码之后,代码也无法验证凭据,但我觉得必须有更好的方法。

4

3 回答 3

2

你的问题有很多不足之处。您可以发布来自服务器的响应或您收到的错误吗?

以下是一些可能有助于您指定端口的观察和反馈

SmtpClient smtpClient = new SmtpClient("zzz.server.xxx", PORTNUMBER);

设置一些基本属性

smtpClient.Timeout = 10000;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = false; //must be set prior to credentials
smtpClient.Credentials = new NetworkCredential("username", "pass");

设置消息编码

message.SubjectEncoding = System.Text.Encoding.UTF8;
message.BodyEncoding = System.Text.Encoding.UTF8;

异步发送并使用回调来确定结果

//add callback 
smtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);

//set token
string userToken = "tokenString";

//send asynchronously
smtpCient.SendAsync(message, userToken);

public static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
        {
            // Get the unique identifier for this asynchronous operation.
             String token = (string) e.UserState;

            if (e.Cancelled)
            {
                 //do something if it was cancelled
            }
            if (e.Error != null)
            {
               MessageBox.Show( e.Error.ToString());
            } else
            {
                MessageBox.Show("Message sent.");
            }
        }
于 2013-03-03T04:56:44.077 回答
0

您的电子邮件服务器是 Exchange Server 吗?如果是这样,您可以使用 Exchange Web 服务 (EWS) 发送电子邮件并将副本保存在“已发送邮件”文件夹中。一个简单的例子可以在这里看到:

发送 Exchange 电子邮件

更多示例代码

于 2013-03-03T05:30:59.860 回答
0

您是否通过在备用客户端(例如 Outlook)中配置帐户来验证凭据,包括用户名的格式?

您可能需要:

smtpClient.Credentials = new NetworkCredential("sender", "password");

或者

smtpClient.Credentials = new NetworkCredential("DOMAIN\sender", "password");
于 2013-03-03T05:18:40.653 回答