Home > .NETメモ

.NETメモ Archive

System.Net.Mail.SmtpClientを使ったSMTP認証メール送信に失敗する

昨日、aol利用者の方から静止画撮影ソフトのメール送信のテスト送信に失敗する旨の連絡をいただいた。

午前中から調査しているが、なかなか原因に迫れない。
メールアカウントを取得しないと難しそうだ。
www.aol.jpにアクセスしてみると、無料でメールアドレスを取得できた。

テスト用のアカウントを入手できたので、アカウントをセットしてエラーを再現してみた。


構文エラーです。コマンドが認識できません。 サーバーの応答: 5.5.0 E6.1 CLIENT AUTHENTICATION REQUIRED. USE ESMTP EHLO AND AUTH.
どうも、System.Net.Mail.SmtpClientのSendメソッドでエラーが発生しているらしい。

ネットで調べてみると同様の事例が何件かあったが、SmtpClientを使っての解決策はなかった。

対応策として、
  1. 個人か会社が作成しているクラスライブラリを使う
  2. System.Web.Mail.SmtpMail(MS社によると非推奨だが・・・)
  3. 自作ライブラリを使う
最終的には自作ライブラリに置き換えたいと考えているが、あいにくVB.NETですぐに使えない
PHPスクリプトで作成したライブラリしか手持ちがない。書き直して、簡易テストして、長期テストして
かなり時間はかかりそうなので、暫定的に、2番目の「System.Web.Mail.SmtpMail」でいくことにする。
うまくいかない時は、3番目の自作ライブラリにする。

結果は、進展があればまた記載しようと思う。

  • Comments (Close): 0
  • Trackbacks (Close): 0

NotifyIconコンポーネントに表示される文字列

.NET Framework 2.0では、NotifyIconクラスを使ってWindowsタスクバーの通知領域にアイコンを表示できる。
使いやすくクラス化されているのでとってもカンタンに利用できる。

Webアクセスログを定期的にダウンロードするソフトで、常駐中にタスクバーに表示させるのに使っている。
起動時にTextプロパティにアプリケーション名を入れて初期化するのだが、たま~に初期化されないことがある。
ちなみに、そのTextプロパティは、アイコン上にマウスカーソルを近づけた時に表示される。

再現性が極めて低いこと、プログラムの機能に実害がないため、これまで詳しい調査はしていない。

話は変わって、この件との直接の関係はないのだが(役に立たない情報ですみません)
調べて物をしていてひょっとして気になる情報を見つけたのでメモしておく。

この情報によると、「シェルへの登録作業が 4 秒以内に完了しない場合には失敗したとみなして制御を戻します」とある。
そもそもアイコンが登録されないので、前述の不具合との関係は薄いと思うが・・・
多発するようであれば、API関係も参考にしようと思う。
一体、.NetFrameworkは内部的に何を呼んでるんだろう。

  • Comments (Close): 0
  • Trackbacks (Close): 0

電子メールアドレスの妥当性チェック

VB.NETで書いたメール送信ソフトに電子メールアドレスの妥当性チェックをする必要があったので調べてみた。
何件か使えそうな情報があったが、以下の記事がわかりやすい。


メールアドレスの完璧な表現をチェックできるわけではないが、申込書やWebフォームで入力される形式としては
実用上の問題はないと思う。以下、記事の内容をもとにした表現のメモ。

Regex.IsMatch(email, “^[\w\-][\w\.\-]*@([\w\-]+\.)+[\w\-]+$”)

\wはアルファベットの大文字、小文字、数字、アンダーバー(_)と一致する。
実は、このメタ文字は全角にもマッチする。そこで、半角にマッチさせてたい場合は、メタ文字部分を半角文字に展開して、

「\w」を「A-Za-z0-9_」としてやる。、展開結果を反映すると、

Regex.IsMatch(txtMail.Text, “^[A-Za-z0-9_\-][A-Za-z0-9_\.\-]*@([A-Za-z0-9_\-]+\.)+[A-Za-z0-9_\-]+$”)

となる。
なお、一部の携帯電話のメールアドレスで利用できるピリオドを使ったアドレスについては注意が必要。
RFCとしては正しくないが、「.」から始まるアドレスをマッチさせたい場合は、こんな感じになる。

Regex.IsMatch(txtMail.Text, “^[A-Za-z0-9_\.\-]*@([A-Za-z0-9_\-]+\.)+[A-Za-z0-9_\-]+$”)

文字数のチェックがないので、本当はまずい。

今は使えないかもしれないが、携帯アドレスには、ピリオドの使い方に不適切な形式があったようだ。
  • ピリオドで始まるアドレス
  • @の左側(直前)がピリオドで終わるアドレス
  • ピリオドが連続するアドレス

RFCとしては使わないのが正しいようだ。


[携帯電話会社のメールアドレス変更に関する情報(参考)]


検索していると、各携帯会社のまとめブログを発見。全体が読めてわかりやすい。
NTTドコモって2009年4月からRFC準拠になってたんだ。



  • Comments (Close): 0
  • Trackbacks (Close): 0

ホーム > .NETメモ

メタ情報

Return to page top