• ベストアンサー

POP before SMTPのメール

ASP.NETでメールの送信を行うWebアプリケーションを試作しております。 POP before SMTPのPOPサーバ認証に失敗しています。 [環境] OS WindowsXP Pro サーバ IIS [ボタン押下時] ================== '接続 Dim pop As TcpClient = New TcpClient(Server, 110) Try Dim NwStm As NetworkStream = pop.GetStream() Dim rdStm As StreamReader = New StreamReader(NwStm, System.Text.Encoding.ASCII) Dim wrStm As StreamWriter = New StreamWriter(NwStm, System.Text.Encoding.ASCII) Try '接続メッセージ確認 res = rdStm.ReadLine() 'ユーザー情報送出 message = "USER " + UserId wrStm.WriteLine(message) wrStm.Flush() 'レスポンス取得 res = rdStm.ReadLine() 'パスワード送出 message = "PASS " + Passwd wrStm.WriteLine(message) wrStm.Flush() res = rdStm.ReadLine() '接続終了 wrStm.WriteLine("QUIT") wrStm.Flush() Finally NwStm.Close() End Try Finally pop.Close() End Try 'ここからメール送信 ・ ・ ・ ================== ビルドの際エラーは出ず、ボタンクリック時に、以下のエラーが出ます。 ================== 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。 または接続済みのホストが応答しなかったため、確立された接続は失敗しました。 Dim pop As TcpClient = New TcpClient(Server, 110) ←エラー箇所 ================== 似たプログラムを書いたことのある方、何か情報をお持ちの方、よろしければアドバイスを頂きたく思います。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

telnet.exeや有名メーラで接続できないのであれば、環境の問題でしょう。 プログラミングの問題ではありません。 ちなみにこちらからは、pop.mail.yahoo.co.jpの110は繋がります。 ポート110がfirewallで遮断されているとかでは?

little0129
質問者

お礼

>ポート110がfirewallで遮断されているとか Windowsファイヤウォールを有効にしていますので、そのような気がしてきました。 ファイヤウォールは切ってしまうわけにはいきませんね… プログラムのせいではないことが判り、ちょっとすっきりしました。 別のWebアプリケーションにトライしようと思います。 どうもありがとうございました!!

その他の回答 (2)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

>Dim pop As TcpClient = New TcpClient(Server, 110) ←エラー箇所 POP認証以前にTCP接続で失敗しています。 Serverが間違っていると思われます。 まずは、telnetで確認した方が分かりやすい。

little0129
質問者

補足

ご回答ありがとうございます。 >まずは、telnetで確認した方が分かりやすい コマンドプロンプトで telnet open サーバ名 ポート番号 という操作のことでよろしいでしょうか。 やはり「ホストへ接続できませんでした」と返ってきます。 (質問が長くなり「telnet接続もできませんでした」という文を削っていました) yahooのフリーメールを使っていますので、 Dim Server As Strings = "pop.mail.yahoo.co.jp" としています。綴りも確認済です。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

エラーメッセージはそのまんまの意味かと思いますが。先にPOPでアクセスすればいいでしょう。 エラー落ちを防ぎたいのならTryでくくればいいだけですが。 あとメールサーバー側の設定次第ではそれでもまともに動かないケースも多々あります。 以下2chからのコピペですが(ログ落ちしてるので見れません) --- そういう場合は例えば foo@bar.com に送るとして、nslookup -type=MX bar.com で得られる mail exchanger を SmtpServer にセットして、直接先方へ送れば多くのケースで動くと思います。 nslookup は System.Diagnostics.Process.Startで起動して、標準出力を貰えばよいでしょう。

little0129
質問者

補足

>先にPOPでアクセスすればいいでしょう。 アクセスする前に失敗しているのだと思っていたのですが… >以下2chからのコピペですが こちらの方法についても調べてみたいと思います。 ありがとうございます。

関連するQ&A

  • C# 半角カナの文字化けについて

    こんにちは。 現在、Visual Studio 2005 C#を使っています。 ネットワーク経由で機器の情報を取得しようとしているのですが、文字化けが起きてしまいました。 調べてみると'c0','b2','d1'と帰ってきていて、これらはS-jis半角カナの'タ','イ',’ム’を表しているようです。 少し省略していますが以下のような手順で確認しています private void buttonStart_Click(object sender, EventArgs e) { TcpClient client = new TcpClient(textBoxIP.Text,int.ParstextBoxPort.Text)); NetworkStream netStream = client.GetStream(); StreamReader sr = new StreamReader(netStream); StreamWriter sw = new StreamWriter(netStream); sw.AutoFlush = true; sw.WriteLine("TestCommand"); string s = sr.ReadLine();//ここで文字化け } StreamReader,StreamWriterの設定でEncoding指定が出来るようですが、sjisは無かったように思いました。 (defaultはUTF-8になっているようですので文字化けしたようです。) どのようにすれば、sjisで文字列を取得できるでしょうか?

  • ソケットとそれに基づくストリームは1対1でしょうか。

    ソケット通信で、接続してきた クライアント(TcpClient tempclient)から、 NetworkStream,StreamReader,StreamWriterなどを 作っています。 Class A while(true){ tcpclient=server.AcceptClient(); networkstream=tcpclient.getStream(); streamreder=new StreamReader(networkstream...); mythread=new Mythread(tcpclient); // networkstream.close() streamreader.close() //これらを加えると、下の、/* */でエラーになります。 } MyThread B { Public Mythread(TcpCLient tcpclient){ /* ns=tcpclient.Getstream sr=... */ } このクライアントを、別のスレッドで使うため、 mythread=new MyThread(tcpclient)などとして、 別のクラスにもっていき、 そこでも、新たに、NetworkStream,StreamReaderを 作ったとします。 この場合、1つのクライアントにつき、2つの ストリームができるのでしょうか。 経験上、ストリームを作成するコードは 問題なく動きます。 しかし、新たにストリームを得たので、古いのを クローズすると、エラーになります。 新たに作ったストリームは、実は、古いストリームを、 使いまわしていることになるのでしょうか。 少し、分かりづらいかもしれませんが、 何か分かる人がいましたら、よろしくお願いします。

  • 1行ごとに取得して、その改行文字が何か知る方法

    CR,LF,CRLFが混在しているテキストで難儀しております。 VB.NETでReadLine()を使えば、どんな改行コードでも削除した文字列を取得できますが、同じ内容を書き込む場合にどのような改行コードわからないと同じファイルができません。 安直にNewLineやWriteLine()を使うと、どんな改行コードでWindowsの場合はCRLFになります。 ReadLine()で取得した文字列+改行コードがわかる方法がありますか? 以下、例です。 dim s as String Dim sr As New System.IO.StreamReader("yomu", "ISO-2022-JP") Dim sw As New System.IO.StreamWriter("kaku", false, "ISO-2022-JP") While sr.Peek() > -1 s = sr.ReadLine() '改行文字を取り除いた文字列 sw.Write(s) '書き込む end While sr.close() sw.close()

  • C# StreamReader,StreamWriter による文字化

    C# StreamReader,StreamWriter による文字化け お世話になります。 文字化けで悩んでいます。 Visual Studio 2008 C# にて、テキストファイルからデータを読んで別のテキストファイルに そのまま書き出す(もちろん実際の運用では加工するわけですが)処理で文字化けが起こります。 そのテキストファイル自身を C# で作れば問題はないのですが、メモ帳を使って書き込んだファイルでは 文字化けが起こります。 対処方法があれば教えてください。 以下はその実験に使ったコードです。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { // これは正常に書き込みできました StreamWriter sw = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test.txt"); sw.WriteLine("これはてすとです。"); sw.WriteLine("This is test."); sw.Close(); // これも正常に読み込め、書き込みもできました StreamReader sr = new StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test.txt"); sw = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\newtest.txt"); while (!sr.EndOfStream) { sw.WriteLine(sr.ReadLine()); } sr.Close(); sw.Close(); // 次はあらかじめメモ帳で作ったファイルを読んで、別のファイルに書き出します // これが文字化けします sr = new StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test2.txt"); sw = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\newtest2.txt"); while (!sr.EndOfStream) { string dat = sr.ReadLine(); sw.WriteLine(dat); Console.WriteLine(dat); } sr.Close(); sw.Close(); } } }

  • VB2005で作ったメール送信プログラムで、メール本文が文字化けしてしまいます。

    VB2005でメール送信プログラムを作ったのですが、送信したBODYが文字化けしてしまいます。どう修正すればよいか、教えてください。 以下がそのコードです。 Imports System.Net.mail Public Class Form1 Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click Dim tc As Sockets.TcpClient Dim ns As Sockets.NetworkStream Dim stat As String Dim mailData As String Dim mailFrom As String = "", mailSubject As String = "", mailBody As String = "" Dim r As Regex Dim m As Match Dim mailCount As Integer Try tc = New Sockets.TcpClient() tc.Connect(txtPOP3Server.Text, 110) ns = tc.GetStream Dim buff(tc.ReceiveBufferSize) As Byte ns.Read(buff, 0, tc.ReceiveBufferSize) POP3Transmit(ns, "USER " & txtUserName.Text, False) POP3Transmit(ns, "PASS " & txtPassword.Text, False) stat = POP3Transmit(ns, "STAT", False) r = New Regex("\+OK (.*) (.*)") m = r.Match(stat) mailCount = Val(m.Groups(1).Value) If mailCount = 0 Then MsgBox("メールはありません") Else mailData = POP3Transmit(ns, "RETR " & mailCount, True) ParseMail(mailData, mailFrom, mailSubject, mailBody) txtBody.Text = mailBody txtFrom.Text = mailFrom txtSubject.Text = mailSubject End If Dim smtpClt As New Net.Mail.SmtpClient("smtp.mail.yahoo.co.jp", 25) Dim from As String = "****@yahoo.co.jp" Dim toYou As String = DataGridView1(1, 0).Value Dim subject As String = TextBox2.Text Dim body As String = TextBox1.Text Try smtpClt.Send(from, toYou, subject, body) Timer2.Enabled = True ToolStripStatusLabel2.Text = "送信しました。" Catch ex As Exception MessageBox.Show(ex.Message) End Try POP3Transmit(ns, "QUIT", False) ns.Close() tc.Close() Catch ex As Exception MsgBox("メールの受信に失敗しました") End Try End Sub End Class

  • HTTP接続すると文字化けがおこってしまいます

    VB2005です。 HTTPサーバーに接続してデータをテキストボックスに書き出す処理なのですが、どうしても文字化けしてしまい困っています。どうしたらよいでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' HTTPサーバーへ接続する Dim client As New WebClient Try ' HTTPサーバーへ接続しストリームを取得する Dim stream As System.IO.Stream = _ client.OpenRead(TextBox1.Text) ' テキストボックスへ結果を書き出す Dim reader As New System.IO.StreamReader(stream) TextBox2.Text = reader.ReadToEnd() reader.Close() stream.Close() Catch ex As WebException ' URLが不正の場合は例外が発生する MessageBox.Show(ex.Message) End Try End Sub

  • csvを新ファイルに8番目で大きい順に並び替え

    VB2010です。 前回、質問させて頂いた続きです。 前回は質問の仕方が失敗で大変皆様にご迷惑をおかけしました・・・・・ 本当に申し訳なく思っています・・・ もうだんだん迷路に入ってしまったので、コードをそのまま記載しました。 Itm(7)を基準に数字の大きい順に並び替えしたいのです。 CSVは全部で19列あります。 ファイルによって違いますが、行数はだいたい100行ぐらいです 無理やりしたのコードを書いたのですが、あと一歩でやはりきれいに並び替えができません・・・ 大変皆様にお手数ですがお助け下さい・・・・ プロの皆様にはかなり幼稚なコードで大変失礼します。 いろいろと試してみたのですが、これぐらいしか自分の力量では思いつかなくて・・・・ 沢山失敗を繰り返したので変なコードも入っているかもですが・・・・・ Dim z As Integer = 0 Dim ReaderA As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & ".csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineA As String = ReaderA.ReadLine Dim Itm() As String Dim s As Integer = 0 Do Until IsNothing(LineA) Itm = LineA.Split(",") If z = 0 Then Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Writer.WriteLine(LineA) Writer.Close() Else Dim ReaderB As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineB As String = ReaderB.ReadLine Dim Stm() As String Dim u As Integer = 0 Do Until IsNothing(LineB) Stm = LineB.Split(",") If Integer.Parse(Itm(7)) > Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If Writer.WriteLine(LineB) If Integer.Parse(Itm(7)) <= Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If s += 1 LineB = ReaderB.ReadLine Loop Writer.Close() ReaderB.Close() IO.File.Delete(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") Microsoft.VisualBasic.FileSystem.Rename(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") End If z += 1 LineA = ReaderA.ReadLine Loop ReaderA.Close()

  • POP Before SMTPでメールを送信する方法

    今回VB.NETを使い、メール送信ソフトを開発しています。 色々調べたのですが、POP Before SMTPだけどう記述してよいか分かりません。 詳しい方が居ましたら、よろしくお願いいたします。 以下認証なしのソース   Dim mail As New System.Web.Mail.MailMessage   mail.From = my@mydomain.com   mail.To = you@youdomain.com   mail.Subject = "テストメールの送信"   mail.Body = "テストメールの本文"   mail.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25   System.Web.Mail.SmtpMail.SmtpServer = "mydomain.com"   System.Web.Mail.SmtpMail.Send(mail) 以下SMTP AUTHのソース   Dim mail As New System.Web.Mail.MailMessage   mail.From = my@mydomain.com   mail.To = you@youdomain.com   mail.Subject = "テストメールの送信"   mail.Body = "テストメールの本文"   mail.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2   mail.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtsperver") = "mydomain.com"   mail.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25   mail.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1   mail.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "UserID"   mail.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Password"   System.Web.Mail.SmtpMail.SmtpServer = "mydomain.com"   System.Web.Mail.SmtpMail.Send(mail)

  • ファイルを読み込み各行の両端にダブルクオーテーションをつけて保存するには?

    お世話になります。 テキストファイルを読み込みファイルの各行の両端に"をつけたいのです。たとえば、 今日は友人と焼肉を食べに行った。 雨の中、外を歩くのはつらかったが、 久々に会える友達のため東京まででかけた。 という文があったとしてプログラムを通しての出力結果が "今日は友人と焼肉を食べに行った。" "雨の中、外を歩くのはつらかったが、" "久々に会える友達のため東京まででかけた。" というように出力されるようにしたいのです。 下記のコードを自分で考えてみましたが、テキストファイルに保存がうまくできませんでした。どうすればよろしいでしょうか? 教えてください。お願いします。 Dim Reader As New IO.StreamReader("C:\aa.txt") Do Until Reader.EndOfStream ListBox1.Items.Add(Chr(&H22) & Reader.ReadLine & Chr(&H22)) Loop Reader.Close() Dim dtmStart As DateTime = DateAdd(DateInterval.Second, 10, Now) Do While Now < dtmStart Application.DoEvents() Loop Dim Writer As New IO.StreamWriter("C:\bb.txt") Writer.WriteLine(ListBox1.Text) Writer.Close() End Sub

  • ファイルの作成からその使用に際して

    VB2008Expressでプログラミング中です。 早速ですが、この度ボタンを押すと3種の.txtファイルを作成し、ある文字列をそこに保存する、といったプログラムが必要になったのですが不具合がでて困っています。 sub createfile() IO.file.create("d:\1.txt") IO.file.create("d:\2.txt") IO.file.create("d:\3.txt") end sub private sub button_click()handles button1.click call createfile() Dim Writer As New IO.StreamWriter("d:\1.txt") Writer.WriteLine(Richtextbox1.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\2.txt") Writer.WriteLine(Richtextbox2.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\3.txt") Writer.WriteLine(Richtextbox3.Text) Writer.Close() end sub といった感じでファイルを作成したらそこにテキストを保存するようにしたいのですが、「ファイルが使用中でアクセスできません」とエラーになります。 いろんなサイトで勉強してみたのですが、いまいち理由がわかりません。どなたか教えていただける方はいませんでしょうか?

専門家に質問してみよう