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

时间:2012-10-05 13:15:30

标签: c# .net windows-phone-7 email

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

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

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

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

6 个答案:

答案 0 :(得分:9)

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

  1. 解析要发送给的电子邮件帐户的MX(邮件交换机)服务器。
  2. 打开MX服务器的套接字。
  3. 发送相应的SMTP commands,以便将电子邮件发送到您的收件人帐户。您基本上可以自由地将“发件人”地址设置为您想要的任意内容。
  4. SMTP是一种非常简单/人性化的协议,因此手动完成所有这些工作并不是一项巨大的努力。同时,有许多prebuilt libraries将为您处理所有这些(除了可能是收件人MX服务器的解析)。

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

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

答案 1 :(得分:3)

您根本不需要使用电子邮件。请考虑使用sentryairbrake等错误报告服务。

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

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

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

答案 2 :(得分:2)

我最近写了一篇关于此的文章:Sending email with C#

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

如果您使用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客户端发送HTML不同的另一个原因是,使用AlphaMail,您可以直接在GUI中编辑代码外的电子邮件。您还可以使用AlphaMail的模板语言Comlang轻松创建高度动态的模板。

<html>
    <body>
        <b>Name:</b> <# payload.FirstName " " payload.LastName #><br>
        <b>Date of Birth:</b> <# payload.DateOfBirth #><br>

        <# if (payload.Id != null) { #>
            <a href="http://company.com/sign-up">Sign Up Free!</a>
        <# } else { #>
            <a href="http://company.com/login?username=<# urlencode(payload.UserName) #>">Sign In</a>
        <# } #>
    </body>
</html>

答案 3 :(得分:0)

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

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);
}
来自here

代码

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

答案 4 :(得分:0)

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

答案 5 :(得分:-2)

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

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