none
VB2008でのメール作成プログラムについて RRS feed

  • 質問

  • いつもお世話になります。
    VB2008でメール送信プログラムを作成しております。

    1、添付ファイルを送ると、ファイル名が文字化けを起こします。Excel、メモ帳、PDFファイルを送りましたが、全て文字化けです。
      PDFファイルは開く事が出来ません。(この文書を開く時にエラーが発生しました。ファイル名、ディレクトリ名、またはボリュームラベルの構文が
      間違っています)と表示されます。(Excel、メモ帳はエラー表示はなく、開きます。)

    2、Textboxにメールのタイトルと本文に文字を入れたいのですが、入れて送信すると受信は出来ますが、件名と本文に何も表示されておりません。

    3、Textboxにメールの本文とタイトル文字を入れ、添付ファイルを送ると、メール上段部分に西ヨーロッパ言語(ISO)と表示されます。

    →タイトルと本文には、フリーハンドで文字を入力し、メール上段部分には タイトル 日本語(自動選択)と表示され、添付ファイル名が文字化けをする事なく
     問題なく開けるようにしたいと思っております。

    メール環境はOE6.0を使用しています。
    VisualBasic2008ExpressEditionを使用しています。
    PC環境はWinXP(SP3)です。

    以下が作成したコードなのですが、デバッグをしてもエラー表示は起きません。
    どのコードが間違っていて、どう修正、加筆すれば良いでしょうか?

    Imports System.Net.Mail
    Public Class メール送信
        Public msg As New MailMessage()
        '宛先の確認
        Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
            msg.From = New MailAddress("xxxx@bbbb.ne.jp", "helpdesk")
            msg.To.Add(New MailAddress("yyyy@bbbb.ne.jp", "氏名"))

            If CheckBox1.Checked = True Then
                MessageBox.Show(CheckBox1.Text & "が選択されました。", "選択メッセージ")
            Else
                MessageBox.Show(CheckBox1.Text & "が解除されました。", "解除メッセージ")
            End If
        End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim ofd As New OpenFileDialog

            With ofd
                'タイトル
                .Title = "開くファイルを選択してください"
                '初期のファイル名
                .FileName = ""
                'フィルターの何番目を既定値にするか
                .FilterIndex = 1
                'フィルター:ファイルの種類
                .Filter = "|すべてのファイル(*.*)|*.*|"

                '初期のフォルダー
                .InitialDirectory = "C:\"
            End With

            '「ファイルを開く」ダイアログを表示。
            If ofd.ShowDialog() = DialogResult.OK Then
                '選択されたファイル名を表示
                TextBox2.Text = ofd.FileName
            End If

            ofd.Dispose()

            msg.Attachments.Add(New Attachment(TextBox2.Text))

        End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

            '送信元の設定
            msg.From = New MailAddress("xxxx@bbbb.ne.jp", "helpdesk")

            'SMTPサーバーの指定
            Dim client As New SmtpClient("メールサーバ")

            'タイトルの設定
            Dim subject As String = TextBox1.Text

            '本文の設定
            Dim body As String = TextBox5.Text

            ' メール送信
            client.Send(msg)

            TextBox1.Clear()
            TextBox2.Clear()
            TextBox5.Clear()

            MessageBox.Show("送信しました!")

            Try
            Catch ex As SmtpException

                ' SMTPサーバーへの接続に失敗した場合
                MessageBox.Show("送信出来ませんでした!")

           End Try

        End Sub
    End Class

    最後まで長文、乱文を見て頂きありがとうございます。
    質問が多くて大変恐縮です。

    お忙しい所ご迷惑をお掛けしますが、宜しくお願い申し上げます。

    2010年2月19日 2:30

回答

  • 外池です。すこし突っぱねたキツイ言い方が過ぎたかもしれません。ごめんなさい。

    ただ、ひとつ言えることは、電子メールというものは、既製品のメール・ソフトを使うにしても、「送ったぞ」「着たけど、本文文字化け」とか「添付ファイルが開けん」というトラブルは今でも往々にして発生します。つまり、メール・ソフトの出来・不出来以外にも、電子メールのフォーマットがいくつもあって、出す側と受け取る側双方がこのフォーマットを承知していないと上手くいかない、という事情があります。

    Outlook Express同士、しかも、完全にデフォルト設定同士なら、何も考えずに上手く行くでしょう。

    じゃぁ、プログラムを組んで送信して、Outlook Expressで読ませるにはどうするか? この場合、Outlook Expressが受け付けてくれる電子メールのフォーマットがどのようなものか知ってないといけません。

    そんなわけで、電子メールのフォーマットに関して、ある程度標準的な仕組みを知っておく必要があります。

    送る文字の種類(範囲)と2進数の対応を定義したものが「文字セット」です。

    電子メールは基本的に英字アルファベット大文字小文字26文字、数字、ちょっとした記号など(127文字以内)のasciiと呼ばれる文字セットのみを使うことを想定して基本の仕組みができています。

    ここに他の種類の文字も使いたいということで様々な工夫がなされてきて、複雑な設定が必要になってきました。日本語文字については私自身はiso-2022-jpを使っています。メールソフトで出すときも、自分でプログラムするときも。アルファベットでも、ヨーロッパの言語に使われる棒印やヒゲ印などがついた文字を使いたければiso-8859-1という西ヨーロッパ向けの文字セットを使えば良いのですが、その代わり日本語文字は使えません。漢字も英数字もヒゲ印文字もなんでもかんでも使いたいというときunicodeを使えばよいのですが、これも8bitで送信するものと7bitで送信するもので、utf-8やutf-7という風に別の文字セットが定義されています。

    このあたりの詳細は、インターネットで検索すれば資料はたくさん見つかりますので、調べてみてください。

    で、じゃぁ、この文字セットを使おうと決めて頂いて、初音玲さんが仰るように、あて先、題名、本文だけからなる一番シンプルなメールの送信からトライするのが良いかと思います。

    -----------------------------------

    以下は、独り言モードなのですが・・・、

    改めてMailMessageクラス(関連する他のクラスも含めて)のドキュメント調べてみたら、Encodingという文字が出てきますが、これは、電子メールの用語で言えば、本来は、character-setのことなんですよね。8bit体系のデータを7bitに押し込む電子メールで言うところのencoding(base64などのこと)の指定は、どこにも現れないんだな。この辺、実装はどうなってるんでしょうね?
    (ホームページを再開しました)
    • 回答としてマーク yosyoso 2010年2月19日 7:32
    2010年2月19日 6:39

すべての返信

  • 外池と申します。ざっと見ただけですが、いくつもの問題を一気に質問されているので、返答しずらいですね。

    ご自分で電子メールを組み立てるプログラムを書く場合に必須の知識がいくつかあります。

      文字セットの問題。「西ヨーロッパ言語(ISO)」という表示が出たとして、これが何を意味してるか
      ご存知でしょうか?

      次に、添付ファイルをくっつけるとして、Content-Typeという概念をご理解されてますでしょうか?

    このあたりをまず解決しておかないと、MailMessageクラスや、Attachmentクラスを使いこなすことは、難しいと思います。
    (ホームページを再開しました)
    2010年2月19日 3:02
  • 外池様、

    返信ありがとうございます。

    外池様と異なり初心者です。サンプルを調べてチョコチョコやっております。

    知識がありませんので、ご回答して下さった事を分かる参考情報等ありましたら
    教えて頂けないでしょうか?

    2010年2月19日 4:14
  • まずは添付ファイルのことはわすれて、添付ファイルなしのメールとして件名などを
    自分が望む形で送信できるプログラムを組んでみたらどうでしょうか。

    http://dobon.net/vb/dotnet/internet/smtpauth.html

    添付ファイルなしで望む形で送信できるまでの質問はこの質問スレッドでやりとり
    して、それが終わったら(つまり添付ファイルなしならOKになったら)、次に添付
    ファイル付のことを新規に質問するのがよいでしょう。

    プログラミングにしても掲示板での質問にしても、一度に全部やろうとせず、基本
    から順番にやっていくのが良いと思います。


    http://blogs.wankuma.com/hatsune/
    2010年2月19日 5:00
  • 初音玲様、

    返信ありがとうございます。

    おっしゃる通りですね。

    1つずつ片づけて行きたいと思います。
    2010年2月19日 6:11
  • 外池です。すこし突っぱねたキツイ言い方が過ぎたかもしれません。ごめんなさい。

    ただ、ひとつ言えることは、電子メールというものは、既製品のメール・ソフトを使うにしても、「送ったぞ」「着たけど、本文文字化け」とか「添付ファイルが開けん」というトラブルは今でも往々にして発生します。つまり、メール・ソフトの出来・不出来以外にも、電子メールのフォーマットがいくつもあって、出す側と受け取る側双方がこのフォーマットを承知していないと上手くいかない、という事情があります。

    Outlook Express同士、しかも、完全にデフォルト設定同士なら、何も考えずに上手く行くでしょう。

    じゃぁ、プログラムを組んで送信して、Outlook Expressで読ませるにはどうするか? この場合、Outlook Expressが受け付けてくれる電子メールのフォーマットがどのようなものか知ってないといけません。

    そんなわけで、電子メールのフォーマットに関して、ある程度標準的な仕組みを知っておく必要があります。

    送る文字の種類(範囲)と2進数の対応を定義したものが「文字セット」です。

    電子メールは基本的に英字アルファベット大文字小文字26文字、数字、ちょっとした記号など(127文字以内)のasciiと呼ばれる文字セットのみを使うことを想定して基本の仕組みができています。

    ここに他の種類の文字も使いたいということで様々な工夫がなされてきて、複雑な設定が必要になってきました。日本語文字については私自身はiso-2022-jpを使っています。メールソフトで出すときも、自分でプログラムするときも。アルファベットでも、ヨーロッパの言語に使われる棒印やヒゲ印などがついた文字を使いたければiso-8859-1という西ヨーロッパ向けの文字セットを使えば良いのですが、その代わり日本語文字は使えません。漢字も英数字もヒゲ印文字もなんでもかんでも使いたいというときunicodeを使えばよいのですが、これも8bitで送信するものと7bitで送信するもので、utf-8やutf-7という風に別の文字セットが定義されています。

    このあたりの詳細は、インターネットで検索すれば資料はたくさん見つかりますので、調べてみてください。

    で、じゃぁ、この文字セットを使おうと決めて頂いて、初音玲さんが仰るように、あて先、題名、本文だけからなる一番シンプルなメールの送信からトライするのが良いかと思います。

    -----------------------------------

    以下は、独り言モードなのですが・・・、

    改めてMailMessageクラス(関連する他のクラスも含めて)のドキュメント調べてみたら、Encodingという文字が出てきますが、これは、電子メールの用語で言えば、本来は、character-setのことなんですよね。8bit体系のデータを7bitに押し込む電子メールで言うところのencoding(base64などのこと)の指定は、どこにも現れないんだな。この辺、実装はどうなってるんでしょうね?
    (ホームページを再開しました)
    • 回答としてマーク yosyoso 2010年2月19日 7:32
    2010年2月19日 6:39
  • 外池の自己レスです・・・。

    >改めてMailMessageクラス(関連する他のクラスも含めて)のドキュメント調べてみたら、
    >Encodingという文字が>出てきますが、これは、電子メールの用語で言えば、本来は、
    >character-setのことなんですよね。8bit体系のデ>ータを7bitに押し込む電子メールで
    >言うところのencoding(base64などのこと)の指定は、どこにも現れないんだな。この辺、
    >実装はどうなってるんでしょうね?

    http://dobon.net/vb/bbs/log3-26/15523.html

    に、かなりOTZな情報が・・・。勝手に決められてしまうんだ。Subjectでiso-2022-jpを指定するとbase64にならないとは。

    いや、ポジティブ指向で書いておきましょう。

    上記のURLにある情報は、非常に良いですね。よしたろうさんにも是非お奨めです。


    (ホームページを再開しました)
    2010年2月19日 6:44
  • 外池様、

    お世話になりました。

    完成しました。

    どうもありがとうございました。

     

    2010年4月15日 4:20