我剛剛嘗試製作c#控制檯程序。我們的想法是製作一個小型的自包含應用程序,它將檢查數據庫並通過電子郵件向一羣用戶發送一個列表,例如每天早上它會自動運行。從c#控制檯應用程序發送郵件在服務器中生成winsock錯誤10054
我還沒有到目前爲止,只是試圖讓現在的基礎第一。通過在線查看教程,我已經能夠連接到數據庫並在控制檯中顯示一個列表。然而,發送郵件不太成功。
如果我在while循環中包含發送郵件的代碼,它會生成一堆單個郵件,所以出於某種原因可以工作。但那不是我想要的。我希望列表運行並編譯一個將成爲消息正文的列表。在那部分程序運行後,我想發送郵件。問題是它不起作用,當我查看服務器日誌時,SMTP會話已打開,但終止並說套接字錯誤發送對數據的響應下一行說Winsock錯誤10045並且會話終止。
任何想法爲什麼發生這種情況?真的是沒有意義的,我的事情是,它的工作原理,如果while循環中運行...
這裏是整個程序,因爲它目前爲:
namespace SendMails
{
class ConnectToMySQL
{
[STAThread]
static void Main(string[] args)
{
string connStr = createConnstr("192.168.111.1","database","login","passwd");
MySqlConnection conn = null;
MySqlDataReader reader = null;
try
{
conn = new MySqlConnection(connStr);
conn.Open();
string stm = "SELECT id, name, surname FROM Kat WHERE Contact = 'Yes' AND Contactwhen <= '"+ DateTime.Today + "'";
MySqlCommand cmd = new MySqlCommand(stm, conn);
reader = cmd.ExecuteReader();
//The actual output on the screen.
while (reader.Read())
{
Console.WriteLine(reader.GetInt32(0) + ": " + reader.GetString(1) + " " + reader.GetString(2));
}
}
catch (MySqlException ex)
{
Console.WriteLine("Error: {0}", ex.ToString());
}
finally
{
if (conn != null)
{
conn.Close();
}
}
createMail("[email protected]", "[email protected]", "Test message", "Here is your test message.");
}
//This builds a mysql connection string
public static string createConnstr(string server, string databaseName, string user, string passw)
{
//build connection string
string connStr = "server=" + server + ";database=" + databaseName + ";uid=" + user + ";password=" + passw + ";";
//return connection string
return connStr;
}
//This sends an email
static void createMail(string recipient, string from, string subject, string msg)
{
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.To.Add(recipient);
message.Subject = subject;
message.From = new System.Net.Mail.MailAddress(from);
message.Body = msg;
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("192.168.111.1");
try
{
Console.WriteLine("Sending mail...");
smtp.Send(message);
Console.WriteLine("Mail was sent successfully!");
}
catch (Exception ep)
{
Console.WriteLine("failed to send mail:");
Console.WriteLine(ep.Message);
}
}
}
}
是在此「192.168.111.1」上配置的郵件服務器。 – Pranav
這個錯誤說:操作不受支持。 _所引用對象的類型不支持所嘗試的操作。通常,這發生在文件描述符引用不支持此操作的文件或套接字時,例如試圖接受數據報套接字上的連接。_ – Pranav
您是否在IIS中配置SMTP虛擬服務器?如果是,你需要添加如下:client.Credentials = CredentialCache.DefaultNetworkCredentials;如果否,請參閱下面的鏈接:http://msdn.microsoft.com/en-us/library/8b83ac7t(v=vs.85).aspx –