2012-10-05 25 views
9

我正在考慮爲我的遊戲實施「報告錯誤/建議」選項,但是我不太清楚該如何才能完成工作。我沒有自己的服務器或任何東西,所以我不能只發送用戶寫到那裏的文本。是否有可能以編程方式發送電子郵件,而無需使用任何實際的電子郵件帳戶

我想出的唯一方法是客戶端會寫一條消息,然後發送給我可以閱讀它們的電子郵件帳戶。但是,我不希望用戶需要通過他們的個人帳戶發送報告。我不太清楚我如何實現這一點,谷歌搜索沒有提出任何好的建議。

我還沒有做過很多網絡工作,所以如果你可以一步一步解釋(甚至可能在代碼中)這個過程,我會非常感激。

我使用C#和遊戲被編程爲Windows Phone 7的

+0

我認爲如果您想了解他們所經歷的更多細節,有一些方法可以與他們取得聯繫。如果有途徑通知他們他們的問題正在解決,並且問題得到解決,那也不錯。 – krillgar

回答

10

是的,這是完全可能的。從相對較低的角度來看,您需要:

  1. 解析要發送到的電子郵件帳戶的MX(郵件交換器)服務器。
  2. 打開MX服務器的套接字。
  3. 發送相應的SMTP commands以使電子郵件傳遞到您的收件人帳戶。你基本上可以自由地將「發件人」地址設置爲任意你想要的東西。

SMTP是一個非常簡單的/人性化的協議,所以這不是一個手工完成的大規模努力。同時,還有一些prebuilt libraries可以處理所有這些(除了可能的收件人的MX服務器的分辨率)。

請注意,以這種方式發送的電子郵件更有可能被過濾爲垃圾郵件(通常是因爲發件人的IP /主機名不會匹配您決定使用的傳出電子郵件地址上的任何域)。

另請注意,由於您可以將「發件人」地址設置爲任何內容,因此您可以選擇詢問用戶是否要提供其實際聯繫地址,如果他們確實可以將該地址設置爲「發件人」地址這樣如果有必要的話,你可以真正地聯繫他們。

+1

如果您擁有**自己的** SMPT服務器並將其配置爲允許任何人發送郵件,則這可以工作。但是大多數公共SMTP服務器會拒絕隨機主機發送的郵件。所以我不認爲這是可行的。 – Alex

+0

這絕對不需要操作您自己的SMTP服務器。我始終使用這種方法*通過JavaMail允許從開發系統發送電子郵件,而無需每個開發人員設置/運行本地SMTP服務器。只需查找收件人的MX服務器,將其作爲傳出SMTP服務器傳遞給JavaMail,剩下的就是自動的。而對於真正的偏執狂來說,將「發件人」地址設置爲「user @」之類的東西幾乎可以完全消除垃圾郵件被拒絕的可能性。 – aroth

+0

您仍需要_連接到SMTP服務器_並且大多數(如果不是全部的話)刪除匿名連接。另外,除非收件人使用一些真正的劣質垃圾郵件過濾(或者已經使用白名單),否則這幾乎總是會被公共電子郵件提供商的垃圾郵件過濾器拒絕,因爲發件人不會有有效的反向DNS(以下標準之一垃圾郵件檢查)。這是一個好方法,但不是普遍的。 –

3

你並不需要使用電子郵件在所有。考慮使用錯誤報告服務,如sentryairbrake

這些服務有您嵌入您的程序中的客戶端;它會自動記錄你的錯誤,包括任何調試信息/堆棧跟蹤;並在應用程序報告問題時通過電子郵件通知您。

通常你會將應用程序的API集成到你自己的錯誤處理機制中。在發生錯誤時,客戶端將捕獲您的調試信息,您可以彈出一個模式詢問用戶,獲取「發生此錯誤時您在做什麼?」等信息,並將其保存爲發送回錯誤響應的一部分服務。

由於該應用程序通過HTTP工作,因此您不需要打開任何特殊端口。它比用戶向你發送「它不工作!!」的電子郵件更容易,更有幫助,而且你不必處理電子郵件發送令人頭疼的問題。

0

所以這是我的想法,你爲什麼不把電子郵件發送給你......就像你?

using System.Net; 
using System.Net.Mail; 

var fromAddress = new MailAddress("[email protected]", "From Name"); //Both the email addresses would be yours 
var toAddress = new MailAddress("[email protected]", "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

所有他們將看到會有那麼他們不會把所有的個人用戶名/密碼提交按鈕,你也應該prolly建立一個虛擬賬戶,讓他們送到即使它只是將它們轉發給您的真實電子郵件帳戶。

+0

我不確定將電子郵件密碼嵌入到應用程序中是否有智能。這將是容易提取的方式,這意味着你無法改變它。 – ctacke

+0

堅實的點。這是明智的嗎?絕對不是,它會起作用嗎?絕對 –

+0

我不知道你是否試圖在Windows Phone上發送電子郵件,如果安全提示不會彈出,詢問權限。我還想知道,如果你不能僅僅在你的應用程序表單上加入一些html代碼,或者以某種方式使用href =「mailto:」,並讓手機加載你的郵件應用程序。 – Phill

-2

嘗試下面的代碼,這可能幫助你:

Dim objCDOMail 
Set objCDOMail = Server.CreateObject("CDONTS.NewMail") 
objCDOMail.From = "[email protected]" 
objCDOMail.To = "[email protected]" 
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 
+0

這個問題表明它使用C#而不是Visual Basic。 –

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("[email protected]", "[email protected]")) 
    .SetReceiver(new EmailContact("Joe E. Receiver", "[email protected]")) 
    .SetBodyObject(person) // Any serializable object 
); 

另一件不同於剛建立HTML並用SMTP客戶端發送它的東西是使用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> 
+0

如何將AlphaMail庫包含到WP7項目中,因爲它們未被編譯爲WP7程序集? – PmanAce

+0

到AlphaMail網站的鏈接被破壞... –

0

另一種方式來實現,這將是舉辦一個WCF服務,需要您的留言並存儲在數據庫或/時發送電子郵件。其中一個缺點是你需要一個Web服務器來做到這一點。

相關問題