在C#Windows应用程序中通过电子邮件发送附件

在C#Windows应用程序中通过电子邮件发送附件,c#,.net,smtp,email,C#,.net,Smtp,Email,我们正在用C#开发一个用于商业发行的.Net Windows应用程序 目标 我想添加一个功能,允许用户从应用程序中向任何电子邮件收件人发送文件,而无需在其PC上安装电子邮件客户端,只需一个internet连接。他们发送的电子邮件需要显示来自他们(即他们的电子邮件地址位于from/REPLYTO字段中),以便收件人可以识别电子邮件的来源并回复 当前方法 我打算在System.Net.Mail中使用MailMessage类,但它需要SMTP服务器来发送电子邮件。问题是,我不希望用户必须配置任何东西才

我们正在用C#开发一个用于商业发行的.Net Windows应用程序

目标

我想添加一个功能,允许用户从应用程序中向任何电子邮件收件人发送文件,而无需在其PC上安装电子邮件客户端,只需一个internet连接。他们发送的电子邮件需要显示来自他们(即他们的电子邮件地址位于from/REPLYTO字段中),以便收件人可以识别电子邮件的来源并回复

当前方法

我打算在System.Net.Mail中使用MailMessage类,但它需要SMTP服务器来发送电子邮件。问题是,我不希望用户必须配置任何东西才能从我们的应用程序发送电子邮件-我希望它由我们设置。换句话说,我想定义从哪个SMTP服务器发送电子邮件,并在应用程序中对其进行硬编码

我曾尝试使用Gmail作为SMTP服务器,但有一个主要缺点——Gmail会自动将您通过其SMTP网关发送的任何电子邮件的“发件人”行重写到您的Gmail地址,因此当我们对此进行测试时,即使在MailMessage代码中,我们将From属性设置为myemail@mycompany.com,收到电子邮件时,将显示“发件人”字段mygmailemail@gmail.com

问题

  • 如果要将此软件应用程序分发给不同网络环境中的许多用户,那么此方法是最佳使用方法吗?如果是这样,是否有一个免费/公共SMTP服务器可用于我们的应用程序,以实现这一点,从而允许最终用户定义FROM和REPLYTO字段

  • 我被告知,并非所有ISP/组织都允许任意SMTP连接,并且/或者如果发件人实现SPF记录,则邮件可能会被拒绝。这是否意味着我预期的方法可能并不总是有效

  • 有没有其他常见的或更稳定的方法可以用来实现我最初的目标


  • 我不认为你能保证任何smtp服务器总是可用的。e、 g.gmail的smtp在我的办公室被阻止

    您最好创建一个web服务,让他们将附件发送到该服务,然后通过邮件服务器进行路由

    1)如果您找到一个公共SMTP服务器来执行此操作,我会感到惊讶,因为它会被大量用作垃圾邮件中继

    2) 许多家庭ISP确实阻止SMTP通信离开他们的网络。但是,他们是通过阻止端口25来实现这一点的,因此,如果您将自己的SMTP服务器托管在备用端口上,它将不会被阻止,除非在最极端的情况下

    3) 见下文

    我看到您必须解决的两个问题:

    从发件人处获取信息给您
    Conrad关于使用web服务的建议是一个很好的建议,因为它可以让您更好地控制发送给您的消息的传输。您可以实施您认为必要的任何身份验证,以确保发送消息的人是合法的。您可以使用SMTP通过您托管的邮件服务器发送邮件,但需要重点了解安全允许发送和不允许发送的人,这样您就不会成为垃圾邮件中继

    将您的信息发送给收件人
    您仍然可以通过SMTP将邮件发送到最终收件人的邮件主机。我建议将发件人作为您的申请发送电子邮件(例如:mailagent@myapplication.com)并定义原始发件人的回复地址。如果您尝试在发件人中使用他们的地址,您将收到更多垃圾邮件拒绝

    如果我理解您的描述,这些消息将只发送给应用程序的其他用户?
    如果是这样,您可以在通信的两个部分上使用web服务路由。发送方通过web服务调用将消息传递到您的集中式服务器,当接收方用户打开软件时,它会检查您的服务器是否有任何消息等待它们

    编辑:
    是的,目的地邮件上的部分,我可以从两个方面看,我想我倾向于错误的一个

    您最终必须通过smtp发送邮件,我仍然建议使用您自己的发件人并将发件人放入回复中,除非这些是您可以将smtp服务器添加到其SPF记录中的公司客户

    此外,调查特定的主要邮件目标,如雅虎!以及GMail,了解如何与他们互动,例如:


    我使用类似的方法发送电子邮件,而不必依赖smtp。YMMV

    你好,康拉德,谢谢你的回复。您建议的Web服务是否更稳定,并且被阻止的几率更小?在开发这样一个Web服务的过程中,有什么我应该注意的吗?例如,有什么可能的块吗?嗨,Maniacxx,谢谢你的回复。我在代码中实现了Hotmail的SMTP,最初的测试似乎还可以。然而,我认为如果它是由我们软件的最终用户从其他网络运行的,它可能会由于各种原因被阻止。2) Hotmail SMTP使用端口25,但如果端口25被阻止,则端口587也使用TLS或SSL加密。3)您可能误解了我最初的描述。我们的windows应用程序是一个金融软件工具。就像许多其他软件工具一样,它创建一个数据文件(就像xls for Excel和doc for Word)。我想在我们的软件中添加一个功能,允许用户将文件发送给任何电子邮件收件人。这类似于Microsoft Office中的“文件>发送到>邮件收件人(作为附件)”选项,但是,我不想在Windows中启动默认邮件客户端并通过该客户端发送邮件,而是想让用户输入电子邮件地址,然后通过编程方式发送文件。如果hotmail允许您将发件人设置为您想要的任何人,我会在发布的应用程序中谨慎使用,因为我怀疑这是一个预期的功能,并且