Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以通过编程方式发送电子邮件而不使用任何实际的电子邮件帐户_C#_.net_Windows Phone 7_Email - Fatal编程技术网

C# 是否可以通过编程方式发送电子邮件而不使用任何实际的电子邮件帐户

C# 是否可以通过编程方式发送电子邮件而不使用任何实际的电子邮件帐户,c#,.net,windows-phone-7,email,C#,.net,Windows Phone 7,Email,我正在考虑在我的游戏中实现“报告错误/建议”选项,但是我不太确定如何才能让它正常工作。我没有自己的服务器或任何东西,所以我不能只发送用户写入的文本 我想出的唯一办法是,客户会写一条消息,我会把它发送到一个电子邮件帐户,在那里我可以阅读它们。但是,我不希望用户需要通过其个人帐户发送报告。我不太确定如何实现这一点,谷歌也没有提出任何好的建议 我没有做过很多网络方面的工作,所以如果你能一步一步地解释(甚至可能是用代码)这个过程,我会非常感激 我正在使用C#,游戏正在为Windows Phone 7编程

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

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

我没有做过很多网络方面的工作,所以如果你能一步一步地解释(甚至可能是用代码)这个过程,我会非常感激


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

你根本不需要使用电子邮件。考虑使用类似或./P>的错误报告服务。 这些服务具有嵌入到程序中的客户端;自动记录错误,包括任何调试信息/stacktrace;并在应用程序报告问题时通过电子邮件通知您

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


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

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

  • 解析要发送到的电子邮件帐户的MX(邮件交换器)服务器
  • 打开MX服务器的套接字
  • 发送适当的电子邮件以使电子邮件发送到您的收件人帐户。您基本上可以自由地将“from”地址设置为您想要的任意内容
  • SMTP是一个非常简单/人性化的协议,因此手动完成所有这些工作并不需要花费大量精力。同时,还有一些解决方案将为您处理所有这些问题(可能除了收件人MX服务器的解析)

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


    另外请注意,由于您可以将“发件人”地址设置为任何地址,因此您可以选择询问用户是否希望提供其实际联系地址,如果他们愿意,您可以将“发件人”地址设置为“发件人”地址,以便在必要时您可以与他们联系。

    这就是我的想法,你为什么不把邮件寄给你呢

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


    他们只会看到“提交”按钮,这样他们就不会有你所有的个人用户名/密码,而且你应该先设置一个虚拟帐户,让他们发送到你的邮箱,即使它刚刚将他们转发到你真正的电子邮件帐户。

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

    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 
    

    我最近写了一篇关于这方面的文章:

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

    • 发送网格
    • 山楂
    如果您使用的是字母邮件,您可以通过以下方式发送电子邮件:

    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的模板语言轻松创建高度动态的模板

    
    名称:
    出生日期:

    实现这一点的另一种方法是托管一个WCF服务,该服务接收您的消息并存储在db中或发送电子邮件。这样做的一个缺点是,您需要一个web服务器来完成这项工作。

    我认为最好有一些方法与他们重新联系,以防您需要更多关于他们经历的详细信息。如果您有自己的SMPT服务器,并将其配置为允许任何人发送邮件,则这可能会起作用。但大多数公共SMTP服务器会拒绝从随机主机发送的邮件。所以我认为这是不可行的。这绝对不需要操作自己的SMTP服务器。我一直在JavaMail中使用这种方法,以允许从开发人员系统发送电子邮件,而无需每个开发人员设置/运行本地SMTP服务器。只需查找收件人的MX服务器,将其作为传出SMTP服务器传递给JavaMail,其余的都是自动的。对于真正的偏执狂来说,通过将“发件人”地址设置为类似
    user@
    ,几乎可以完全消除邮件被拒绝为垃圾邮件的可能性。您仍然需要连接到SMTP服务器,并且大多数(如果不是全部的话)删除匿名连接。此外,除非收件人使用了一些真正劣质的垃圾邮件过滤(或使用了白名单),否则这几乎总是会被公共电子邮件提供商的垃圾邮件过滤器拒绝,因为发件人没有有效的反向DNS(垃圾邮件检查的标准之一)。这是一个很好的方法,但不是通用的。@BurhanKhalid-大多数(如果不是全部的话)SMTP服务器都会丢弃匿名传出连接/中继尝试(另外,配置任何SMTP服务器以允许任何人发送邮件是一个很好的方法)
    <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>