PowerShell Scripting Weblog

MSMVP for PowerShellのライター牟田口大介が、Windows上で動作するスクリプティング環境(Windows PowerShell、IronPython、Windows Script Host(WSH)、HTML Application(HTA)、Windows サイドバー/デスクトップ ガジェットetc)に関するTips、コード、ニュースなどを紹介します。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  211  : 記事  1  : コメント  473  : トラックバック  46

ニュース

2010/7/1 MSMVP for PowerShell再受賞!
2010/03/23
サイト名をScripting WeblogからPowerShell Scripting Weblogに変更
2009/10/17 このブログのミラーを作りました

自己紹介

ライター兼プログラマでMSMVP for Data Center Management - PowerShell のむたぐち(牟田口大介)です。

MVP Logo

Microsoft MVP for Visual Developer - Scripting July 2004-June 2007
Microsoft MVP for Data Center Management - PowerShell July 2007-June 2011

広告

書庫

日記カテゴリ

My Sites

コミュニティ

Outlook2007は、メールアドレスに.の連続(hoge...hoge@example.com)や@の前に.がある場合(hoge.hoge.@example.com)にはメールを送信することができません。受信トレイに「システム管理者」から送信不能と通知メッセージが入ります。

これは別にOutlook2007が悪いんじゃなくて、RFCに準拠しているためです。でもDocomoやauなど、このRFCに準拠していないキャリアがあって、結構、よく見ます。その辺の詳しい事情はこちらなどをどうぞ。

で、Outlookユーザーはじゃあこれらのメアドにはメールを送れないのか、と言うとそうではなく、実は裏技があって、@の前の部分を""(ダブルクォーテーション)でくくることで送信可能になります。

"hoge...hoge"@example.comや"hoge.hoge."@example.comなどのようにします。これはOKとRFCで規定されてるらしいですね。

でも毎回これを手で入力するのはメンドイ!

ということでなんとかしてみました。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim oMailItem As MailItem
    Dim bExistInvalidAddress As Boolean
    
    If TypeName(Item) = "MailItem" Then
        Set oMailItem = Item
        
        Dim reAddress As New RegExp
        reAddress.Pattern = "([a-zA-Z0-9\-\_\.]+)\@([a-zA-Z0-9\-\_\.]+)"
        reAddress.Global = True
            
        sMailAddresses = Split(oMailItem.To, ";")
        
        For I = 0 To UBound(sMailAddresses)
            If (InStr(sMailAddresses(I), "..") Or InStr(sMailAddresses(I), ".@")) And _
            InStr(sMailAddresses(I), """") = 0 Then
                sMailAddresses(I) = reAddress.Replace(sMailAddresses(I), """$1""@$2")
                bExistInvalidAddress = True
            End If

        Next
        
        If bExistInvalidAddress Then
            oMailItem.To = Join(sMailAddresses, ";")
            Cancel = True
        End If
        
    End If
End Sub

このようなコードをThisOutlookSessionに埋め込みます。VBエディタでF2キーを押してMicrosoft VBScript Regular Expression 1.0と5.5を参照設定してください。ただしマクロなんで毎回起動時にマクロを有効にするか聞かれます。(以上の意味が分からない方は使わないほうが無難です)

すると、問題あるメールアドレスのメールを送信しようとすると、正しくクォーテーションがつけられたメールアドレスに変換します。ただしTo:だけです。Cc:やBcc:にも対応してもよかったんですがそれは宿題ということで。

Cancel=Trueは要らないと思ったんですが、これを取るとなんかさらに''でクォートされて送信トレイに残骸が残ってしまいます。ので、一度メール編集画面に戻るようにしています。

投稿日時 : 2008年12月3日 21:23

コメント

# [macro][Outlook2007]Re: Re: Re:を何とかする 2008/12/20 19:01 Scripting Weblog
[macro][Outlook2007]Re: Re: Re:を何とかする

# [macro][Outlook2007]Re: Re: Re:を何とかする 2008/12/23 12:02 Scripting Weblog
[macro][Outlook2007]Re: Re: Re:を何とかする

Post Feedback

タイトル
名前
Url:
コメント: