フォルダをスキャンしてファイルをスキャンし、添付ファイルとして電子メールで送信するこのコンソールアプリケーションを作成しました。これは、ローカルマシンで正常に動作します。しかし、別のマシン(テストサーバー)でリモートで実行しようとすると、例外が発生します。
これは私が見る例外です。
innerException {System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions *******:25
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)
at System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)
at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)
at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)} System.Exception {System.Net.WebException}
これがサーバーではなくローカルマシンで機能する理由がわかりません。それは、Outlookアカウントがサーバーに設定されていないためですか?
これは私のアプリケーションのメールコードです-
public static void SendMailMessage(string file)
{
const string subject = "TESTING";
const string body = "";
string from = ConfigurationManager.AppSettings["from"];
string to = ConfigurationManager.AppSettings["to"];
var message = new MailMessage(from, to, subject, body);
message.Attachments.Add(new Attachment(file));
var client = new SmtpClient("smtp.mail***.com")
{
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = true
};
try
{
client.Send(message);
Console.WriteLine("Email Successfully sent!");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("[email protected]", "patito12");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Send(mail);
587
がブロックされているため、「リモートサーバーに接続できません」というエラーが発生することがあります。問題は、リモートでデフォルトの資格情報を使用していることです。このような環境ではデフォルトの資格情報にアクセスする方法がないため、リモートサーバーによって拒否されます。これを試してみてください。
var client = new SmtpClient("smtp.mail***.com",port)
{
NetworkCredentials = new NetworkCredentials("username","password")
};
client.Send();