是否可以以编程方式发送电子邮件而无需使用任何实际的电子邮件帐户

我正在考虑在我的游戏中实施“报告错误/建议”选项,但是我不太确定如何才能实现这一目标。 我没有自己的服务器或任何东西,所以我不能只发送用户写入的文本。

我提出的唯一方法是客户端会写一条消息,我会将其发送到一个电子邮件帐户,我可以在那里阅读它们。 但是,我不希望用户需要通过他们的个人帐户发送报告。 我不太确定如何实现这一点,谷歌搜索没有提出任何好的建议。

我没有做过很多网络工作,所以如果你能逐步解释(甚至可能在代码中)这个过程,我真的很感激。

我正在使用C#,正在为Windows Phone 7编写游戏。

是的,绝对有可能做到这一点。 从相对较低的角度来看,您需要:

  1. 解析要发送到的电子邮件帐户的MX(邮件交换器)服务器。
  2. 打开MX服务器的套接字。
  3. 发送相应的SMTP命令以使电子邮件传递到您的收件人帐户。 您基本上可以自由地将“发件人”地址设置为您想要的任意内容。

SMTP是一种非常简单/人性化的协议,因此手动完成所有这些工作并不是一项巨大的努力。 同时,有许多预构建的库可以为您处理所有这些(可能除了收件人的MX服务器的分辨率)。

请注意,以这种方式发送的电子邮件更有可能被过滤掉为垃圾邮件(通常是因为发件人的IP /主机名不会与您在决定使用的传出电子邮件地址上放置的任何域匹配)。

另请注意,既然您可以将“发件人”地址设置为任何地址,您可以选择询问用户是否要提供他们的实际联系地址,如果他们这样做,您可以将其设为“发件人”地址以便您可以如果有必要,实际上可以与他们联系。

您根本不需要使用电子邮件。 考虑使用像哨兵或空气制动器这样的错误报告服务。

这些服务包含您嵌入程序的客户端; 它会自动记录您的错误,包括任何调试信息/堆栈跟踪; 并在您的应用程序报告问题时通过电子邮件通知您。

通常,您将应用程序的API集成到您自己的error handling机制中。 在出现错误时,客户端将捕获您的调试信息,您可以弹出一个模式,询问用户是否有“此错误发生时您在做什么?”等信息,将其保存为发送回错误响应的一部分服务。

由于应用程序通过HTTP工作,因此您不需要打开任何特殊端口。 让用户向您发送“不起作用!!”的电子邮件更容易,更有帮助,而且您不必处理电子邮件发送令人头疼的问题。

我最近写了一篇关于此的文章: 用C#发送电子邮件

你基本上有两个选择,要么你使用SMTP客户端发送它,这意味着你必须有一个SMTP服务器,并能够连接到端口25(如果你没有使用外部SMTP,那么你必须自己管理)。 或者您可以使用外部电子邮件提供商,例如:

  • AlphaMail
  • SendGrid
  • 山魈

如果您使用的是AlphaMail,则可以通过以下方式发送电子邮件:

 IEmailService emailService = new AlphaMailEmailService() .SetServiceUrl("http://api.amail.io/v1/") .SetApiToken("YOUR-ACCOUNT-API-TOKEN-HERE"); var person = new Person() { Id = 1234, UserName = "jdoe78", FirstName = "John", LastName = "Doe", DateOfBirth = 1978 }; var response = emailService.Queue(new EmailMessagePayload() .SetProjectId(12345) // ID of AlphaMail project (determines options, template, etc) .SetSender(new EmailContact("support@company.com", "from@example.com")) .SetReceiver(new EmailContact("Joe E. Receiver", "to@example.org")) .SetBodyObject(person) // Any serializable object ); 

与构建HTML并将其与SMTP客户端一起发送的另一个不同之处在于,使用AlphaMail,您可以直接在GUI中编辑代码外的电子邮件。 您还可以使用AlphaMail的模板语言Comlang轻松创建高度动态的模板。

   Name: <# payload.FirstName " " payload.LastName #>
Date of Birth: <# payload.DateOfBirth #>
<# if (payload.Id != null) { #> Sign Up Free! <# } else { #> Sign In <# } #>

所以这就是我的想法,你为什么不把电子邮件发给你……就像你一样?

 using System.Net; using System.Net.Mail; var fromAddress = new MailAddress("from@gmail.com", "From Name"); //Both the email addresses would be yours var toAddress = new MailAddress("to@example.com", "To Name"); //Both the email addresses would be yours const string fromPassword = "fromPassword"; const string subject = "There name or whatever"; const string body = "Errors ect...."; var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) }; using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { smtp.Send(message); } 

来自这里的代码

所有他们看到的都是提交按钮,因此他们不会拥有您的所有个人用户名/密码,您也应该设置一个虚拟帐户,以便将它们发送到即使它们然后将它们转发到您的真实电子邮件帐户。

实现此目的的另一种方法是托管WCF服务,该服务接收您的消息并存储在db或/发送电子邮件中。 这样做的一个缺点是你需要一个Web服务器才能做到这一点。

尝试以下代码可能会对您有所帮助:

 Dim objCDOMail Set objCDOMail = Server.CreateObject("CDONTS.NewMail") objCDOMail.From = "sender@domain.com" objCDOMail.To = "receiver@domain.com" objCDOMail.Subject = "Test Mail Script" objCDOMail.BodyFormat = 0 objCDOMail.MailFormat = 0 objCDOMail.Body = "Testing Mail from Test Script" objCDOMail.Importance = 1 objCDOMail.Send Set objCDOMail = Nothing