问题标签 [smtpclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
9037 浏览

c# - SmtpClient 类未从 Web.Config 文件中获取默认参数

配置文件:

我已经尝试过 defaultCredentials="true" 但收到以下消息:

System.FormatException:Smtp 服务器返回无效响应。

如何解决问题?

0 投票
4 回答
11536 浏览

c# - 如何从我的 C# 应用程序发送电子邮件?

这是我写的代码:

它不工作。我在“client.Send(mail)”行出现异常,显示“邮箱不可用。服务器响应为 (MYLOCALCOMPUTERNAME) [MY LOCAL IP]:3045 当前不允许中继。”

connectAccess.Access 确实返回“连接”(我不确定这是否有必要......我添加它以开始故障排除过程。)

这是否意味着我的本地机器必须以某种方式进行配置?当我将我的应用程序部署到其他人的机器时呢?那里需要本地配置吗?我只是想从我的应用程序中创建一个“发送反馈”类型的链接。

(注意:在我的真实应用程序中,我在“收件人”和“发件人”中都使用了我的真实电子邮件地址,而我的 smtp 实际上是我在托管我的 url/网站的地方的 smtp 地址)

谢谢!

-阿迪娜

0 投票
6 回答
36006 浏览

c# - 我可以在调用 client.Send() 之前测试 SmtpClient 吗?

这与我前几天问的一个关于如何发送电子邮件的问题有关。

我的新相关问题是……如果我的应用程序的用户位于防火墙后面或其他原因导致线路 client.Send(mail) 不起作用怎么办……

行后:

在我尝试发送之前,我可以做些什么来测试客户端吗?

我想过把它放在一个 try/catch 循环中,但我宁愿做一个测试,然后弹出一个对话框说:无法访问 smtp 或类似的东西。

(我假设我和潜在的我的应用程序用户都没有能力调整他们的防火墙设置。例如......他们在工作中安装应用程序并且无法在工作中控制他们的互联网)

-阿迪娜

0 投票
5 回答
6665 浏览

.net - .NET SMTPClient - 待发邮件存储在哪里?

如果我已将一些电子邮件排队等待通过 System.Net.Mail.SMTPClent 发送,我在哪里可以找到这封邮件?对于 Windows SMTP 客户端,它位于 C:\inetpub\mailroot 文件夹中 - .NET 客户端是否有类似的文件夹?

编辑:这是一个例子。如果我关闭 XP 计算机上的传出 SMTP 服务器,然后运行一个发送十多封电子邮件的应用程序,它们会在某个地方排队,因为 .NET SMTPClient.Send 调用成功。几个小时后,我启动了本地 SMTP 服务器,邮件突然飞快地离开了。期间在哪里?同样的行为发生在我的 Vista 桌面上,虽然我没有本地 SMTP 服务器——我可以通过在防火墙上阻止端口 25 来复制该功能,然后邮件在某处排队。在哪里?

这个问题的原因是我想在我拥有的服务器上重新启用 SMTP 服务,但我不知道在此期间排队的是什么,我想确保当我重新时队列是干净的 -启用服务。这样一来,客户就不会突然收到非常非常旧的排队电子邮件。

编辑:显然,我不知道我在说什么。当我在 Vista 上执行此操作时:

我得到一个例外,因为我没有 IIS 拾取文件夹。将其更改为“Mail.SmtpDeliveryMethod.Network”会立即导致异常,因为我没有运行 SMTP 服务器。我将在服务器 2003 上对此进行测试,但我可以发誓这两者在过去都有效。如果需要,我将进行更多测试并修改问题。

0 投票
7 回答
15735 浏览

c# - 为什么 SmtpClient.SendAsync 只能调用一次?

我正在尝试使用 SmtpClient 在 .NET 中编写通知服务(用于完全合法的非垃圾邮件目的)。最初我只是遍历每条消息并发送它,但是这很慢,我想提高速度。所以,我改用“SendAsync”,但现在第二次调用时出现以下错误:

我读到这意味着 MS 削弱了 System.Net.Mail 以防止群发邮件。它是否正确?如果是这样,是否有更好的方法在 .NET 中执行此操作,并且仍然能够记录每封电子邮件的结果(这对我们的客户很重要)。如果不是,为什么 SendAsync 只能被调用一次?

0 投票
10 回答
68784 浏览

asp.net - 如何在 Web.config 中为 SmtpClient 启用 SSL

有没有办法从 web.config 设置 EnableSSL?

我可以在代码中设置此属性,但这不适用于简单邮件 Web 事件和其他使用默认 Smtp 服务器的类。有任何想法吗?

0 投票
1 回答
1874 浏览

.net - 从未使用 SpecifiedPickupDirectory 从 Exchange 2007 发送密件抄送

我正在使用 Exchange 2007 拾取目录从我的 ASP.NET 应用程序发送电子邮件System.Net.Mail.SmtpClient。因此我正在使用SmtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory. 它可以正常发送电子邮件,但后来我注意到密件抄送根本不起作用。放置在拾取文件夹中的文件似乎具有正确的设置,但 Exchange 忽略了 X-Receiver 列表。这是正在创建的 EML 文件的示例:

contact@ 和 lindsey@ 是密件抄送收件人。当我使用网络发送时,它工作正常。BCC 仅停止使用拾取目录。所以你知道,我使用的是 Windows Server 2008 和 ASP.NET 3.5 / C#。

解决方法

Exchange 2007 似乎忽略了 X-Receiver,而是希望看到 Bcc:。所以我求助于 mailMessage.Headers.Add("Bcc", bccList) 其中 bccList 是电子邮件地址的分号分隔列表。这很好用。

但是正如 Chase Seibert 指出的那样,如果您在电子邮件客户端中查看消息的标题,您仍然可以看到列出的所有 X-Receiver。尽管密件抄送已被剥离,因此对收件人隐藏。因此,您获得了密件抄送的效果,可能有人会打开邮件并查看所有密件抄送。我认为抑制 X-Receivers 列表的最佳方法是不在 mailMessage.Bcc 属性中包含任何内容。

0 投票
5 回答
3259 浏览

c# - 电子邮件发送过程的限制速度

对不起,标题有点蹩脚,我无法准确地表达它。

编辑:我应该注意这是一个控制台 c# 应用程序

我已经制作了一个像这样工作的系统的原型(这是粗略的伪代码):

发送电子邮件:

发送完成:

显然这种设置并不理想。如果初始集合有 10,000 条记录,那么它将以相当短的顺序新建 10,000 个 smtpclient 实例,并尽可能快地遍历行 - 并且可能会在此过程中加速。

我理想的最终结果是同时发送 10 封并发电子邮件。

想到一个 hacky 解决方案:添加一个计数器,当 SendAnEmail() 被调用时递增,当 SendComplete 被发送时递减。在初始循环调用 SendAnEmail() 之前,检查计数器,如果它太高,则休眠一小段时间,然后再次检查。

我不确定这是一个好主意,并且认为 SO 蜂巢思维有办法正确地做到这一点。

我对线程知之甚少,不确定它是否适合在这里使用。例如,在后台线程中发送电子邮件,首先检查子线程的数量以确保没有使用太多。或者,如果内置某种类型的“线程节流”。


更新

按照 Steven A. Lowe 的建议,我现在有:

  • 包含我的电子邮件和唯一键的字典(这是电子邮件查询
  • 填充字典的 FillQue 方法
  • ProcessQue 方法,它是一个后台线程。它检查队列,并发送队列中的任何电子邮件。
  • 从队列中删除电子邮件的 SendCompleted 委托。并再次调用 FillQue。

我对这个设置有一些问题。我想我错过了背景线程的船,我应该为字典中的每个项目生成其中一个吗?如果电子邮件队列清空线程结束,我怎样才能让线程“闲逛”,因为没有更好的词。


最终更新

我在后台线程中放置了一个“while(true) {}”。如果 que 是空的,它会等待几秒钟,然后再试一次。如果 que 反复为空,我会在此期间“中断”,然后程序结束......工作正常。不过,我有点担心“while(true)”的业务。

0 投票
3 回答
1438 浏览

.net - .NET MailMessage 和 SMTPClient 被标记为垃圾邮件?

我正在准备基本的 HTML 电子邮件,并使用了带有适当 HEAD 和 BODY 标签的基本 HTML 模板,但由于某种原因,我的用户在收到我的电子邮件时遇到了麻烦。

我正在使用 ASP.NET MailMessage 和 SMTPClient 对象,并且邮件发送得很好,我可以自己收到测试邮件,大多数用户都在收到它们,但是有些网站将我的邮件标记为垃圾邮件。

我也一次发送一个,而不是多个收件人等。

当我通过同一帐户从 Thunderbird 向同一邮件服务器发送消息时,一切都很好。但是我通过网络准备的那些被一些人标记为垃圾。

我检查了我的主机并将邮件服务器更正为“Localhost”(这就是网络服务器看到邮件服务器的方式)并且清除了一些。

有什么我可以做或应该做的事情来确保信息能够响亮而清晰地传递出去吗?标志,属性等?

蒂亚!

0 投票
1 回答
2168 浏览

email - MailMessage.From.DisplayName 与 SmtpClient.Send() 的行为不符

我正在使用以下代码在 .Net2.0 中发送电子邮件。

我遇到的问题是,当我检查我的电子邮件收件箱时,电子邮件的 from 字段显示“webmaster@mydomain.com”而不是“代表其他人的 webmaster@mydomain.com”,即它只显示来自电子邮件地址而不是 DisplayName。

我试过设置和我设置message.ReplyTo的一样,message.From但这似乎没有什么区别。

我在这里错过了什么吗?