RingCentral と eFax という 2 つの異なるファックス プロバイダーから送信された電子メールから TIFF 添付ファイルを抽出する電子メール パーサーを作成しました。
アプリケーションは、Pop3 を使用して電子メールをテキスト ストリームとして取得し、テキストを解析して、Tiff 画像を表すセクションを識別します。
テキストのそのセクションをバイト配列に変換し、 を使用するBinaryWriter
ことで、ローカル ハード ドライブに TIFF ファイルを作成できます。
public void SaveToFile(string filepath)
{
BinaryWriter bw = new BinaryWriter(new FileStream(filepath, FileMode.Create));
bw.Write(this.Data);
bw.Flush();
bw.Close();
}
問題は、テキストをバイト配列に変換するときに、eFax 電子メールの添付ファイルによって実行時エラーが発生することです。
//_data is a byte array
//RawData is a string
_data = Convert.FromBase64String(RawData); //fails on this line
次のエラーが表示されます。
入力は有効な Base-64 文字列ではありません。非 Base 64 文字、3 つ以上の埋め込み文字、または埋め込み文字の間に非空白文字が含まれているためです。
文字列のエンコード/デコードに関係していると思いますが、さまざまなエンコードの種類を試しましたが、それでもエラーが発生します。
いくつかの追加情報:
- プログラミング言語: C#
- メールホスト: GMail
- メールを自分自身に手動で転送すると、パーサーは機能しますが、元のメールに対しては機能しません。
- GMail で自動転送も試しましたが、うまくいきませんでした。
以下の最初のコメントに返信します。返信ありがとうございます。
TIFF ファイルは、TIFF ファイルの添付ファイルに関連付けられている電子メールからテキストのセクションを取得し、それをバイト配列に変換して、.tiff
ファイル拡張子を付けてファイルを保存することによって作成されます。これは、すべての RingCentral メールで問題なく機能します。たとえば、RingCentral の電子メール セクション ヘッダーは次のようになります。
------=_NextPart_3327195283162919167883
Content-Type: image/tiff; name="18307730038-0803-141603-326.tif"
Content-Transfer-Encoding: base64
Content-Description: 18307730038-0803-141603-326.tif
Content-Disposition: attachment; filename="18307730038-0803-141603-326.tif"
base64 の Content-Transfer-Encoding 値に注意してください。これは、次の C# 変換コードを使用する理由を説明しています。
_data = Convert.FromBase64String(tiffEmailString);
_data
プライベート変数で、上記の SaveToFile メソッドで戻り値として使用されます (つまり_data
、 this.Data プロパティ値が使用されたときに返されます)。
次に、eFax (失敗した電子メール) セクション ヘッダーの場合:
Content-Type: image/tiff; name=FAX_20130802_1375447833_61.tif
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="FAX_20130802_1375447833_61.tif"
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==
それもbase64を示しています。Convert.FromBase64String()
では、メソッド呼び出しは機能しないのでしょうか?
また、パーサーが追加のテキストを取得しているかどうかも確認します。しかし、何かが足りない場合は、ご指摘ください。ありがとう。
最新の更新:
結局のところ、問題はエンコーディングではなく、私のパーサーでした! 添付テキストに追加のヘッダー値を誤って含めてしまいました。それは今働いています。ありがとう。