ホーム>source

Outlook VBAのヘルプが必要です。

Outlookで、個別の配信不能メール本文からメールアドレスを抽出するためのマクロを作成しようとしています。

配信に失敗した電子メールは何百もあるので、手動でコピーして貼り付けるよりも自動的に抽出できる方がいいでしょう。

メール本文は次のようになります。

ウィズウィズ

私は完全にOutlook VBAの初心者なので、たくさんの検索と多くの証跡を経て、ようやく以下のコードを思いつきました。

<前>ウィズウィズ

Excelシートを開き、対象の電子メール内のすべての特定の電子メールアドレスをリストする私のテスト電子メール受信トレイで完全に機能しました。

ただし、仕事用のメールアカウントでこのコードを実行しても、何も起こりませんでした。その後、「配信不能」メールの読み取りに問題があることがわかりました。奇妙なのは、実行すると毎回、配信不能メールの1つが繁体字になり、まったく読めなくなってしまうことです。

以下のように:

ウィズウィズ

このコードは、転送された配信不能メールのみで機能するように感じています。テストメールの受信トレイにあります。しかし、Microsoft Outlookから送信された元の配信不能メールからは決して読み取らず、それらのメールを1つずつ漢字に変換しました。

私はそれについてグーグルで調べました、彼らは失敗した配達メールのためのOutlookのいくつかのバグであるように思われました。これを修正する方法を知っている人はいますか?または私のコードを改善する方法はありますか?私は何でも変えることにオープンです。

----------------------------Email----------------------------

Delivery has failed to these recipients or groups:

XXXX@XXXXXX.XXX (XXXX@XXXXXX.XXX)

...no need info...

To: XXXX@XXXXXX.XXX

...no need info...

----------------------------Email-----------------------------

あなたの答え
  • 解決した方法 # 1

    数日間イライラした後、私はようやくはるかに簡単な解決策を思い付きました、それはOutlookのNDRの制限を心配する必要がなく、VBAをまったく使用しません...

    私がしたことは:

    Outlookで配信不能メールをすべて選択します

    「.txt」ファイルとして保存

    Excelを開き、txtファイルを開き、「区切り」を選択し、「テキストインポートウィザード」で区切り文字として「タブ」を選択します。

    列Aを「To:」で除外すると、列Bのすべてのメールアドレスが取得されます

    これはVBAよりもはるかに簡単であるとは信じられません...

    助けてくれてありがとう!ワークステーションに非常に多くの制限があるため、「Outlook NDRが判読不能な文字になる」というバグに実際に対処できないので、これが役立つと思います。

  • 解決した方法 # 2

    ReportItem.Body に問題があります  Outlookオブジェクトモデルのプロパティ(Outlook 2013 abd 2016に存在)-OutlookSpyで確認できます。NDRメッセージを選択し、[アイテム]ボタンをクリックして、[Body]プロパティを選択します-文字化けします。さらに悪いことに、レポートアイテムがOOMで操作されると、Outlookは同じ迷惑メールをプレビューウィンドウに表示します。

    レポートのテキストは、さまざまなMAPI受信者プロパティに保存されます(OutlookSpyの[IMessage]ボタンをクリックして、 GetRecipientTable に移動します  タブ)。問題は ReportItem です  オブジェクトはRecipientsコレクションを公開しません。回避策は、Extended MAPI(C ++またはDelphi)またはRedemption(任意の言語)を使用することです-そのRDOReportItem.ReportTextプロパティにこの問題はありません。

    <前>ウィズウィズ

    set oItem = Application.ActiveExplorer.Selection(1) set oSession = CreateObject("Redemption.RDOSession") oSession.MAPIOBJECT = Application.Session.MAPIOBJECT set rItem = oSession.GetRDOObjectFromOutlookObject(oItem) MsgBox rItem.ReportText も使用できます  受信者テーブルからさまざまなNDRプロパティを抽出するコレクション。

  • 解決した方法 # 3

    アドレスを取得するために...本文と送信者を含むOutlookメッセージを作成するaction.replyからアドレスを取得できます。

    <前>ウィズウィズ

    そしてGET SMTP:

    <前>ウィズウィズ RDOReportItem.Recipients

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ image processing - 機械学習フレームワークカフェは異なるデータ型の精度をサポートしていますか?