- PR -

SmtpClientクラスを使用したSMTP認証メール送信に失敗する。

1
投稿者投稿内容
シロネコムサシ
会議室デビュー日: 2003/05/09
投稿数: 3
投稿日時: 2006-12-06 23:04
お世話になります。

SmtpClientでSMTP認証メールを送信しようとすると、以下のエラーにより送信できな
い現象が起こっています。
 
 System.Net.Mail.SmtpException: 構文エラーです。コマンドが認識できません。
 サーバーの応答: Authentication required
 エラーコードは505


 .NET Framework1.1で存在するSystem.Web.Mail.SmtpMailクラスを使用すると
送信できます。
 (下記コード参照。本コードのsmtpClient.Sendで問題の例外が出ます。)

 メール送信を試みているmailサーバでサポートしている認証方式が、PLAINと
CRAM-MD5なのですが、SmtpClientクラスではこれらの方式に対応していないので
しょうか?




[環境]

 Windows2003Server Standard
 VS2005

---以下、コード


using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Mail;
using System.Net.Mail;
using System.Diagnostics;

namespace SmtpClient
{
class MailClass
{
/// <summary>
/// コンストラクタ
/// </summary>
public MailClass()
{

}

/// <summary>
/// メール送信
/// </summary>
/// <param name="hostName">メールサーバホスト名。例:mailServ.co.jp</param>
/// <param name="mailAdr">メールアドレス。例:user1@yahoo.co.jp</param>
/// <param name="usrName">認証ユーザ名。例:user1</param>
/// <param name="passwd">パスワード。例:user1Pass</param>
public void SendMail(string hostName, string mailAdr, string usrName, string passwd)
{
//
//ここから:SmtpMailクラスを使用 .Net1.1
//

//メールメッセージを作成。
System.Web.Mail.MailMessage mailMessage = new System.Web.Mail.MailMessage();
mailMessage.To = mailAdr;
mailMessage.From = mailAdr;
mailMessage.Subject = "[Test]Smtp送信テスト(1.1)";
mailMessage.Body = "SMTP送信テストです。";
if (!string.IsNullOrEmpty(usrName))
{
// SMTP認証に設定
mailMessage.Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1;
mailMessage.Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"] = usrName;
mailMessage.Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"] = passwd;
}

try
{
//メール送信
SmtpMail.SmtpServer = hostName;
SmtpMail.Send(mailMessage);
}
catch (Exception ee)
{
Debug.WriteLine(ee.ToString());
}
//
//ここまで
//

//
//ここから:SmtpClientクラスを使用するパターン .Net2.0
//
System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient(hostName);
//SMTP認証を使用する場合、ユーザ名、パスワードを指定。
smtpClient.UseDefaultCredentials = false;
if (!string.IsNullOrEmpty(usrName))
{
smtpClient.Credentials = new System.Net.NetworkCredential(usrName, passwd);

}
System.Net.Mail.MailMessage mailMessage2 = new System.Net.Mail.MailMessage(mailAdr, mailAdr, "[Test]Smtp送信
テスト(2.0)", "SMTP送信テストです。");
mailMessage2.BodyEncoding = Encoding.GetEncoding("Shift-JIS");
mailMessage2.SubjectEncoding = Encoding.GetEncoding("Shift-JIS");
mailMessage2.Sender = new MailAddress(mailAdr);
mailMessage2.ReplyTo = new MailAddress(mailAdr);
try
{
//メール送信
smtpClient.Send(mailMessage2);
}
catch (SmtpException se)
{
Debug.WriteLine(se.ToString()+"\\r\\nコード:"+se.StatusCode+" "+se.StatusCode);
}
catch (Exception ee)
{

Debug.WriteLine(ee.ToString());
}
//
// ここまで
//
}

}
}
Msist
会議室デビュー日: 2007/01/11
投稿数: 1
投稿日時: 2007-01-11 13:53
SMTP認証でメールを送信する(.NET Framework 2.0) VB2005(.NET Framework2.0)でSMTP認証を使ったメールの送信サンプルです。

[VB.NET]
Imports System.Net
Imports System.Net.Mail

Module Program
Sub Main()
Dim Message As New MailMessage("from", "to", "subject", "body")
Dim Client As New SmtpClient("smtp server name")
Client.Credentials = New NetworkCredential("user name", "password")
'Client.EnableSsl = True 'SSL認証のときは、コメントアウト
Client.Timeout = 100000 '←これが無いとダメ
Client.Send(Message)
End Sub
End Module
1

スキルアップ/キャリアアップ(JOB@IT)