これは、Outlook で TNEF と呼ばれるフォーマットにより、添付ファイルなどが WINMAIL.DAT にエンコードされてメッセージが送信されたため発生するもので、回避策としては送信元の Outlook の設定で TNEF を使わなくしてもらうというものになります。しかし、相手がお客様だったりした場合、受信者側でそのようなことをお願いするのは難しいという場合もあるかもしれません。
そこで、Outlook Express や Windows メールで受信してしまった WINMAIL.DAT 付きのメールから添付ファイルを取り出すことができるようにするスクリプトを作ってみました。
このスクリプトではコマンドラインで指定された EML ファイルから WINMAIL.DAT のデータをデコードし、ファイル名に "-decoded" をつけた新しい EML ファイルを生成します。例えば、c:\temp\test.eml というファイルをコマンドラインで指定すると、c:\temp\test-decoded.eml というファイルを生成します。
この生成された EML ファイルを開くと通常のメールと同様に添付ファイルが取り出せます。
使い方は以下のとおりです。
- Outlook Express などで受信した添付ファイルがなくなったメッセージをデスクトップなどに EML ファイルとして保存します。
- 保存した EML ファイルを後述のスクリプトファイルにドラッグアンドドロップします。(Outlook Express から直接スクリプトファイルにドラッグアンドドロップはできません。)
- EML ファイルと同じフォルダに作成された -decoded.eml ファイルを開きます。
- 添付ファイルを取り出します。
EML ファイルから直接ファイルをディスクに書き込むことも検討したのですが、スクリプトではバイナリデータの書き込みができず、かといって Visual Basic 2005 を使ったりするのは敷居が高いと思われたので、バイナリデータを BASE64 でテキストとして EML ファイルに書き込むという方法をとりました。
なお、ファイル名はシフト JIS 限定ですので、他の言語のファイル名が使われている場合、文字化けなどが発生する可能性があります。
下記のスクリプトをメモ帳などを使って DecodeWinMail.vbs というような名前で保存して使用してください。
'
' DecodeWinMail.vbs - ここをトリプルクリックでスクリプト全体を選択できます。
'
' WINMAIL.DAT ファイルが添付された EML ファイルを通常の MIME フォーマットに変換
'
Option Explicit
' 定数定義
' Base64 の文字マッピング
Const BASE64DIGITS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Const BASE64BUFLEN = 57 ' = 76/4*3
' MIME 処理フェーズ
Const MIME_HEADER = 0
Const MIME_FIND_BOUNDARY = 1
Const MIME_PART_HEADER = 2
Const MIME_TO_LAST = 3
'
Const TemporaryFolder = 2
' グローバル変数
Dim abReadBuffer(64) 'As Byte
Dim lPtr 'As Long
Dim lReadSize 'As Long
Dim objFSO 'As FileSystemObject
Dim objShell 'As WShShell
' コマンドラインの指定があったら
If WScript.Arguments.Count > 0 Then
' ファイル名を指定してデコード開始
DecodeMain WScript.Arguments.Item(0)
Else
' ファイル名指定が無ければ使用方法を表示
WScript.Echo "使用方法: decodewinmail.vbs [eml ファイル名]"
End If
'
' デコード処理のメインループ
'
Sub DecodeMain(ByVal strFileName)
Dim stmRead 'As TextStream
Dim stmWrite 'As TextStream
Dim iPhase 'As Integer
Dim strLine 'As String
Dim strBoundary 'As String
Dim strHeader 'As String
' FileSystemObject の生成
Set objFSO = CreateObject("Scripting.FileSystemObject")
' WshShell の生成
Set objShell = CreateObject("WScript.Shell")
' eml ファイル以外が指定されたら終了
If Instr(strFileName, ".eml") = 0 Then Exit Sub
' コマンドラインで指定されたファイルを読み取りオープン
Set stmRead = objFSO.OpenTextFile(strFileName)
' 書き込むファイルのファイル名は拡張子の前に -decoded をつけたものとする
Set stmWrite = objFSO.CreateTextFile(Replace(strFileName,".eml","-decoded.eml",1,-1,1),True)
' ヘッダの読み取りから開始
iPhase = MIME_HEADER
While Not stmRead.AtEndOfStream
strLine = stmRead.ReadLine
Select Case iPhase
Case MIME_HEADER
' ヘッダ中に boundary 指定が現れたら
If Instr(strLine,"boundary=") > 0 Then
strBoundary = Mid(strLine, Instr(strLine,"""")+1)
strBoundary = "--" & Left(strBoundary, Instr(strBoundary,"""")-1)
' 次の boundary を検索するフェーズに移行
iPhase = MIME_FIND_BOUNDARY
End If
stmWrite.WriteLine strLine
Case MIME_FIND_BOUNDARY
' 指定された boundary 文字列が現れたら
If strLine = strBoundary Then
strHeader = ""
' MIME サブパートのヘッダの処理の開始
iPhase = MIME_PART_HEADER
End If
stmWrite.WriteLine strLine
Case MIME_PART_HEADER
' 改行のみの行はヘッダの終わりを意味する
If strLine = "" Then
' Content-Type が application/ms-tnef だったら
If Instr(strHeader,"Content-Type: application/ms-tnef") >= 1 Then
' TNEF のデコード
DecodeTnef stmRead, stmWrite, strBoundary
' 以降のデータはそのまま書き込み
iPhase = MIME_TO_LAST
Else
' TNEF でなければヘッダをそのまま書き込んで次の boundary まで書き込み
stmWrite.WriteLine strHeader
iPhase = MIME_FIND_BOUNDARY
End If
Else
' ヘッダはまとめて書き込む
strHeader = strHeader & strLine & vbCrLf
End If
Case MIME_TO_LAST
' 最後までそのままコピー
stmWrite.WriteLine strLine
End Select
Wend
End Sub
'
' TNEF のデコード
'
Sub DecodeTnef(ByVal stmRead, ByVal stmWrite, ByVal strBoundary)
Dim abBuf(11) 'As Byte
Dim iLen 'As Integer
Dim abFileName() 'As Byte
Dim strFileName 'As String
Dim i 'As Integer
Dim cAttach 'As Integer
Dim iReadSize 'As Integer
Dim abData(64)
Dim bHeader ' As Boolean
Dim strTempName ' As String
Dim stmTemp ' As TextStream
' グローバル変数の初期化
lPtr = 0
lReadSize = 0
' 先頭 4 バイトを空読み込み
If Base64ReadByte(stmRead, abBuf, 4, False) < 4 Then
Exit Sub
End IF
'
cAttach = 0
bHeader = False
Set stmTemp = Nothing ' データとヘッダが逆になった場合の一時ストリーム
' 11 バイトのデータヘッダを読み込み
While Base64ReadByte(stmRead, abBuf, 11, True) = 11
' データの長さの取得
iLen = ((((abBuf(10) * 256) + abBuf(9)) * 256) + abBuf(8)) * 256 + abBuf(7)
' 02 10 は添付ファイル名
If abBuf(2) = 2 And abBuf(3) = &h10 Then
' ファイルが 2 つ目以降なら Boundary を書き込み
If cAttach > 0 Then
stmWrite.WriteLine strBoundary
End If
ReDim abFileName(iLen)
' ファイル名をバイナリで取得
If Base64ReadByte(stmRead, abFileName, iLen, True) < iLen Then
Exit Sub
End If
' ファイル名をバイナリからテキストに変換 (SJIS のみ対応)
strFileName = ""
For i=0 To iLen-1
If (abFileName(i) >= &h80 And abFileName(i) <= &h9f) Or abFileName(i) >= &he0 Then
strFileName = strFileName & Chr(abFileName(i) * 256 + abFileName(i+1))
i = i + 1
ElseIf abFileName(i) <> 0 Then
strFileName = strFileName & Chr(abFileName(i))
End If
Next
' 添付ファイルのヘッダを書き込み
stmWrite.WriteLine "Content-Disposition: attachment; filename=""" & strFileName & """"
stmWrite.WriteLine "Content-Transfer-Encoding: base64"
stmWrite.WriteLine "Content-Type: application/octet-stream;name=""" & strFileName & """" & vbCrLf
If stmTemp Is Nothing Then ' 一時ストリームがなければヘッダ書き込みフラグをオン
bHeader = True
Else ' 一時ストリームがあったら内容をコピー
stmWrite.WriteLine stmTemp.ReadAll()
stmTemp.Close
Set stmTemp = Nothing
' 一時ストリームを削除
objFSO.DeleteFile strTempName
bHeader = False
End If
' 02 0f は添付ファイルのデータ
ElseIf abBuf(2) = 2 And abBuf(3) = &h0f Then
If bHeader Then ' ヘッダ出力済みならそのまま書き込み
Set stmTemp = stmWrite
Else ' ヘッダがまだの場合は一時ストリームへ書き込み
strTempName = objShell.ExpandEnvironmentStrings("%TEMP%\" & objFSO.GetTempName())
Set stmTemp = objFSO.CreateTextFile(strTempName,True)
End If
' 一度に読み取るデータサイズはエンコード後に 76 バイトとなる 57 バイト
iReadSize = BASE64BUFLEN
While iLen > 0
If iLen < BASE64BUFLEN Then
iReadSize = iLen
End If
' データを読み込み
If Base64ReadByte(stmRead, abData, iReadSize, True) < 0 Then
Exit Sub
End If
' Base64 で書き込み
Base64Write stmTemp, abData, iReadSize
iLen = iLen - iReadSize
Wend
' 最後に改行のみを追加
stmTemp.WriteLine
If bHeader Then
Set stmTemp = Nothing
Else
stmTemp.Close
Set stmTemp = objFSO.OpenTextFile(strTempName)
End If
cAttach = cAttach + 1
' 02 10 と 02 0f 以外は無視
Else
If Base64ReadByte(stmRead, abBuf, iLen, False) < 0 Then
Exit Sub
End If
End If
Wend
End Sub
'
' Base64 のデータから指定されたバイト数を読み込み
'
Function Base64ReadByte(ByVal stmRead, ByRef abBuf, ByVal iLen, ByVal bReadReally)
Dim iCopied 'As Integer
Dim iCopyLen 'As Integer
Dim i 'As Integer
iCopied = 0
While iCopied < iLen
' バッファの終わりにポインタがある
If lPtr = lReadSize Then
' Base64 データの読み込み
lReadSize = lReadSize + Base64Read(stmRead, abReadBuffer)
' データが読み込めなかった場合は -1 を返す
If lPtr = lReadSize Then
Base64ReadByte = -1
Exit Function
End If
' バッファに読み込んでいないデータがある
Else
If lPtr+iLen-iCopied > lReadSize Then
iCopyLen = lReadSize - lPtr
Else
iCopyLen = iLen - iCopied
End If
If bReadReally Then
For i=0 To iCopyLen - 1
abBuf(iCopied+i) = abReadBuffer((lPtr + i) Mod BASE64BUFLEN)
Next
End If
iCopied = iCopied + iCopyLen
lPtr = lPtr + iCopyLen
End If
Wend
Base64ReadByte = iCopied
End Function
'
' Base64 でデコードして読み込み
'
Function Base64Read(ByVal stmRead, ByRef abData)
' On Error Resume Next
Dim strText 'As String
Dim i 'As Long
Dim l 'As Long
Dim j 'As Integer
Dim dc(4) 'As Integer
Dim lMax 'As Long
Dim strDecode 'As String
Dim dcMax 'As Long
' ファイルから 1 行読み込み
strText = stmRead.ReadLine
lMax = Len(strText)
i = 0
dcMax = 0
While i * 4 < lMax
l = i * 4 + 1
For j = 0 To 3
If l + j <= lMax Then
dc(j) = InStr(1, BASE64DIGITS, Mid(strText, l + j, 1), vbBinaryCompare) - 1
Else
dc(j) = -1
End If
Next
l = i * 3
abData(l) = (dc(0) * &H4 Or (dc(1) And &H30) / &H10)
dcMax = dcMax + 1
If dc(2) >= 0 Then
abData(l + 1) = ((dc(1) And &HF) * &H10 Or (dc(2) And &H3C) / &H4)
dcMax = dcMax + 1
End If
If dc(3) >= 0 Then
abData(l + 2) = ((dc(2) And &H3) * &H40 Or (dc(3) And &H3F))
dcMax = dcMax + 1
End If
i = i + 1
Wend
' デコードしたバイト数を返す
Base64Read = dcMax
End Function
'
' Base64 でエンコードしてファイルに書き込み
'
Sub Base64Write(ByVal stmWrite, ByVal abData, ByVal iSize)
' On Error Resume Next
Dim i 'As Long
Dim j 'As Integer
Dim c 'As Integer
Dim ecMax 'As Integer
Dim ec(3) 'As Integer
Dim strEncoded 'As String
'
strEncoded = ""
ecMax = 3
For i = 0 To iSize-1 Step 3
c = abData(i)
ec(0) = Int(c / 4)
ec(1) = (c And 3) * 16
If i + 1 >= iSize Then
c = 0
ecMax = 1
Else
c = abData(i + 1)
End If
ec(1) = ec(1) Or Int(c / 16)
ec(2) = (c And 15) * 4
If i + 2 >= iSize Then
c = 0
If ecMax > 2 Then ecMax = 2
Else
c = abData(i + 2)
End If
ec(2) = ec(2) Or Int(c / 64)
ec(3) = c And &H3F
For j = 0 To ecMax
strEncoded = strEncoded & Mid(BASE64DIGITS, ec(j) + 1, 1)
Next
If Len(strEncoded) >= 76 Then
stmWrite.WriteLine strEncoded
strEncoded = ""
End If
Next
' 最後の行を書き込み
If strEncoded <> "" Then
If Len(strEncoded) Mod 4 > 0 Then
strEncoded = strEncoded & String(4 - (Len(strEncoded) Mod 4), "=")
End If
stmWrite.WriteLine strEncoded
End If
End Sub
こんにちは、正に上記の症状で添付ファイルが開けず困っていて、このページにたどり着きました。DecodeWinMail.vbs を使わせていただき試してみたのですが、ウィンドが開いて「実行できません。引数一覧が長すぎます。」というメッセージが出て、添付ファイルを取り出すことが出来ませんでした。私の症状は上記に似て非なるものだったのかもしれません。この場で私に起きた症状を長々と説明して良いものかわかりませんが、何かアドバイス頂けるとありがたいです。
To 寺島 修さん「引数一覧が長すぎる」というエラーは、おそらく開こうとしたファイルの名前が長すぎるために発生していると思われます。ファイル名を短くしたり、c:\\ の直下にファイルを置いたりして試してみてください。また、ファイルのフルパスにスペースが含まれている場合は、"" でファイル名を括ってみてください。
[…] 人気記事 Outlook 2010/2007/2003 でメールを送信すると添付ファイルが消えたり、WINMAIL.DAT というファイルになる問題Outlook 2007 で UTF8 のメッセージを受信すると文字化けする問題についてOutlook VBA マクロ、はじめの一歩Exchange Server 2003 環境の Outlook 2010/2007 で HTML メールを送信すると、メッセージの一部が文字化けしたり、取り消し線が引かれたりする現象についてOutlook Express や Windows Mail で消えてしまった添付ファイルを取り出す (WINMAIL….Outlook で送信できないメールアドレスOutlook マクロ・スクリプト インデックスメッセージの途中で文字化けが発生する原因Outlook Express で分割送信されたメッセージを結合するマクロ受信したメールの添付ファイルを自動保存するマクロ […]
[…] しかし、添付ファイルのデータも WINMAIL.DAT にカプセル化されてしまうため、TNEF を認識できないメールソフトで受信した場合には添付ファイルが WINMAIL.DAT に置き換わったように見えます。 また、Outlook Express は WINMAIL.DAT を解読できないことがわかっているため、その添付ファイルを無かったものとしてしまい、クリップマークすら表示しません。 なお、クリップマークすら表示されないので、「添付ファイルが削除された」と勘違いされる方もいますが、実際には添付ファイル自体は削除されず残っているので、スクリプトを使えば添付ファイルを取り出すことが可能です。 […]
こんにちわ、こちらのスクリプトを使用させていただきましたところ、添付ファイルは見えるようになったのですが、0バイトのものになってしまい開くことが出来ませんでした。
スクリプトでエンコードしたメールを見てみると、添付ファイルのヘッダー情報とファイル情報が逆に記述されてしまっているようでした。
何か、こちらの環境に問題があるのでしょうか。お知恵を貸していただければ幸甚です。
宜しくお願い致します。
どうやら Outlook 2010 で作成したメールだと添付ファイル名とファイルデータの順序が逆になってしまうようです。
Outlook 2010 に対応するようスクリプトを修正しました。
お世話になります。早速のご対応ありがとうございました。
無事添付ファイルを取り出すことが出来ました。
送信元が海外のお客様の為、対応してもらうことが出来ず難儀しておりました。
本当に助かりました、ありがとうございました。
初めてメール差し上げます。
表題の現象に困り、御掲出いただいたスクリプトをデスクトップに保存しemlファイルをドロップしたところ、
~decoded というemlファイルは出来るのですが、ダブルクリックで開いても添付ファイルは現れず、
本文の部分におそらく添付ファイルが展開されたテキストが付け加えられています。何か原因にお心当たりは
お有りでしょうか。お教えいただけましたら幸いです。
おそらくスクリプトが想定していない状態のWINMAIL.DATファイルを受信していると思われます。
送信側がどのような環境 (Outlook および Exchange サーバーのバージョン) を使用しているかお分かりになりますでしょうか?
初めてメールを差し上げます。
Outlook Express から直接スクリプトファイルにドラッグアンドドロップはできません。
という事は、Outlook Express では添付ファイルを取り出せないという事でしょうか?
それとも、他の方法で可能でしょうか? 教えて頂けたら有難いです。
Outlook Express から直接スクリプト ファイルにドラッグアンドドロップするのではなく、いったんデスクトップなどに保存した後、そのファイルをスクリプト ファイルにドラッグアンドドロップしてください。
連絡有難うございました。 スクリプトをメモ帳などを使って DecodeWinMail.vbsで保存をした時に、ファイル名にスペースが出来たためスクリプトファイルに変換されませんでした。 私のやり方が悪かったようです。大変助かりました。 本当に有難うございました。
こんにちは。急ぎの大事なファイルでしたので大変助かりました。ありがとうございました。
スクリプト使用させて頂きました。
先日来、業務関係で数件 winmail.dat ケースが発生しておりまして、先方にテキスト形式での再送を依頼しても改善されず、OUTLOOKを使うなとも言えずに悩んでおりました。 WinmailOpenerより安心して使えます。本当にありがとうございました。
たすかりました!!!
お得意様からの大事なデータを取り出す事ができ、すごく助かりました!!ありがとうございました。
他の人のところには添付データが届き、私のところにはデータが添付されておらず、どうしてだろうと色々調べていたらここにたどり着きました。
すばらしいの一言です!
助かりました。ありがとうございます。
私も困り果てていた一人でした。
お陰様で無事ファイルを取り出すことが出来ました。
大変助かりました。 有難う御座いました。
スクリプト使用させて頂きました、
ただこちらで使用した時は1回ドロップしても添付ファイルは現れず、
ためしにドロップ後の作成された -decoded.emlを再度ドロップしたら添付ファイルが現れました!、
大変助かりました、有り難う御座いました。
スクリプトを使用させていただきました。
再送してもらったメールにも添付ファイルがついていなかったので、とても焦っていたところに
このサイトに出会えました。
非常に助かりました、ありがとうございました!
頻繁にやり取りをするお客さまからのメールがいつもこの状態になるので、大変助かりました。
ドラッグ&ドロップするだけ!!!ありがとうございました。
助かりました!受け取る側でしたので、なかなか伝えられなかったので、これからがとても楽になります。本当にありがとうございました。
WindowsLiveメール2012ではエラーがでたのですが、他に何か解決方法はありますでしょうか?
行59、文字21、エラー内容:プロシージャの呼び出し、または引数が不正です。:’Left’、コード800A0005
おそらくヘッダーがスクリプトで想定していないような形式になっていると思われます。
Windows Live メールが原因ではなく、送信側の問題と思うのですが、回避策があるか調査してみます。
取引先からの添付ファイルが見当たらず、再送してもらったのにまた添付されておらず、困っていて辿り着きました。
見事に添付ファイルが復活してすごいです!助かりました。ありがとうございます。
素晴らしい。これこそIT魂ですね。
ありがとうございます
最近、先方のパソコンがXPから変わったようで、添付ファイルが見えない状態になって困っていたところです
こちらのスクリプトを使用した結果、見事に添付が読めるようになりました
先方は取引先でもあり、かつ、パソコンに疎い人間らしくアウトルックの設定を触れない人でしたのでありがたかったです。
こんにちは
返事がいただけるとうれしいのですが
実は、このスクリプトに誤って違うファイルをドロップしてしまったところ
そのファイルが 0バイトになってしまいました
たまたまそのファイルにバックアップがあったので事なきを得ましたが
いくつかのファイルで試した見たところ 0バイトになるようです
0バイトになったファイルは復旧できるのでしょうか?
このスクリプトではドロップされたファイルは読み取るだけで書き込みは行わないはずなのですが…
誤ってドロップしたファイルというのも EML ファイルなのでしょうか?
こんにちは
ご返事ありがとうございます
たまたま誤ってドロップしたファイルは事務計算用のエクセルファイルでした(拡張子xls)
このスクリプトが便利なため、デスクトップに置いていたところ、となりにあったこのファイルを間違えてドラッグアンドドロップしてしまったみたいです
現在は、安全のためスクリプトをフォルダ内に入れて必要なときだけフォルダをあけて作業しているのでトラブルは発生しておりません
調べたファイルは.xls .doc .jpg です すべて 0バイトになって開けなくなりました
自分の環境はXPのSP3です、よろしくお願いします。
ファイル名作成のロジックに誤りがあり、.eml 以外の拡張子のファイルだと読み込みファイルと書き込みファイルが同じになってしまっていました。
スクリプトを修正しました。
具体的には以下の行を追加しています。
‘ eml ファイル以外が指定されたら終了
If Instr(strFileName, “.eml”) = 0 Then Exit Sub
早速の対応ありがとうございました
助かりました。ありがとうございます。
Windows liveメールで発生しなぜだろうと調べておりました。ありがとうございます!
[…] しかし、添付ファイルのデータも WINMAIL.DAT にカプセル化されてしまうため、TNEF を認識できないメールソフトで受信した場合には添付ファイルが WINMAIL.DAT に置き換わったように見えます。 また、Outlook Express は WINMAIL.DAT を解読できないことがわかっているため、その添付ファイルを無かったものとしてしまい、クリップマークすら表示しません。 なお、クリップマークすら表示されないので、「添付ファイルが削除された」と勘違いされる方もいますが、実際には添付ファイル自体は削除されず残っているので、スクリプトを使えば添付ファイルを取り出すことが可能です。 […]
大変、助かりました。素晴らしいスクリプトです。
クライアントからのメールで大変困っていたので助かりました!
Liveメールで困ってました。ありがとうございました! 無事開けました~。
お客さまからのメールに添付がないように見え、でもCCで入っている同僚には見えていたようなので
再送もお願いしづらく、困っていました。
助かりました。ありがとうございました!
お客様からの添付ファイルが消えてしまい困っていたところ、検索でこちらに辿り着きました。
無事にファイルを取り出すことができました!助かりました!!
大変助かりました!ありがとうございました!
届くメールの半分はファイルが表示されず大変困っていました。本当にありがとうございます(TvT)/
添付ファイルが消えてしまい、困っていた所でココにたどり着きました。無事開けて確認する事が出来ました。本当にありがとうございました。
感謝!感謝!です。
No19と同じ現象です。
行59、文字21、エラー内容:プロシージャの呼び出し、または引数が不正です。:’Left’、コード800A0005
回避策があるか調査してみますと有りますが、解決出来たので有れば
ご教授願います。
[…] というページに詳しく書いていただいていました。 「Outlook Express や Windows Mail で消えてしまった添付ファイルを取り出す (WINMA… […]
特定の相手からのメールだけ毎回添付が見えない状態で毎度困っていたのですが
無事取り出せました!感謝です
なんとなく時間あったからいじってみたよ。
No.19のLeftうんちゃらのエラーは多分これで出なくなる
strBoundary = Mid(strLine, Instr(strLine,””””)+1)
strBoundary = “–” & Left(strBoundary, Instr(strBoundary,””””)-1)
以上の2行を以下の2行に置換
strBoundary = Mid(strLine, Instr(strLine,”boundary=”)+9)
strBoundary = “–” & Replace(strBoundary, “”””, “”)
失敬。こちらで
strBoundary = Mid(strLine, Instr(strLine,””””)+1)
strBoundary = “–” & Left(strBoundary, Instr(strBoundary,””””)-1)
以上の2行を以下の6行に置換
If Instr(strLine,”boundary=”””) > 0 Then
strBoundary = Mid(strLine, Instr(strLine,””””)+1)
strBoundary = “–” & Left(strBoundary, Instr(strBoundary,””””)-1)
Else
strBoundary = “–” & Mid(strLine, Instr(strLine,”boundary=”)+9)
End If
教えて頂いた方法でスクリプトにEMLファイルをドロップ、新たに出来たencoded.emlを開くのですが「Untitled attachement.dat」というファイルだけが出て来て添付ファイルが見れません。何故でしょうか?
横から失礼。それは単にファイル名を見失ってるだけでファイルは正常なのかもしれません
極窓にUntitled attachment.datを放り込んでみたらどうでしょう
助かりました。ありがとうございました。
ありがとうございました!!!
利用させていただきました。
助かりました。
ありがとうございました。
解決しました!
ありがとうございます!
まるで魔法のようで感激しました!
[…] しかし、添付ファイルのデータも WINMAIL.DAT にカプセル化されてしまうため、TNEF を認識できないメールソフトで受信した場合には添付ファイルが WINMAIL.DAT に置き換わったように見えます。また、Outlook Express は WINMAIL.DAT を解読できないことがわかっているため、その添付ファイルを無かったものとしてしまい、クリップマークすら表示しません。 なお、クリップマークすら表示されないので、「添付ファイルが削除された」と勘違いされる方もいますが、実際には添付ファイル自体は削除されず残っているので、スクリプトを使えば添付ファイルを取り出すことが可能です。 […]
[…] しかし、添付ファイルのデータも WINMAIL.DAT にカプセル化されてしまうため、TNEF を認識できないメールソフトで受信した場合には添付ファイルが WINMAIL.DAT に置き換わったように見えます。また、一部のメール プログラムは WINMAIL.DAT を解読できないことがわかっているため、その添付ファイルを無かったものとしてしまい、添付ファイルを表すマークすら表示しません。 そのため、「添付ファイルが削除された」と勘違いされる方もいますが、実際には添付ファイル自体は削除されず残っているので、スクリプトを使えば添付ファイルを取り出すことが可能です。 […]