EPPlus を使用して、2 枚のシートとその中にいくつかのデータを含む Excel ファイルを作成しています。ExcelPackage クラスの GetAsByteArray() メソッドを使用して、これをバイト配列に変換できます。ExcelPackage コンストラクターを使用して、次のようにバイト配列から Excel ファイルを作成することもできます。
var memoryStream = new MemoryStream(excelpackageByteArray)
var excelPackage = new ExcelPackage(memoryStream)
したがって、少なくともEPPlusに関する限り、バイト配列が実際にExcelパッケージ/ファイルを表していることはわかっています。そのため、Attachment オブジェクトを作成するエンドポイントにそのバイト配列を送信しようとしました。このオブジェクトは、contentType 用、コンテンツ用、ファイル名用の 3 つの文字列を受け取ります。contentType には、"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" MIME タイプを指定しています。コンテンツについては、Python の b64 モジュールを使用してバイト配列を b64 エンコードし、それをコンテンツとして渡します。
メールを受信すると、Excel ファイルが添付ファイルとして表示され、ダウンロードできます。しかし、ファイルを開こうとすると、次のエラー メッセージが表示されます。
「ファイル形式またはファイル拡張子が無効であるため、Excel はファイルを開くことができません。ファイルが破損していないこと、およびファイル拡張子がファイルの形式と一致していることを確認してください。」
Postmark の Attachment オブジェクト構造を考えると、コンテンツをどのように渡す必要がありますか? 具体的には、Excel ファイルのバイト配列構造を取得して、Excel ファイルの添付ファイルをダウンロードして開くときに、Gmail やその他の電子メール サービスが適切にデコードできるようにする文字列に変換するにはどうすればよいですか? Postmark API は特に、base64 でエンコードされた文字列を必要とします。しかし、b64でそれを試したところ、うまくいきませんでした。間違ったものをエンコードしていますか? バイト配列をエンコードする代わりに、Excel パッケージ自体をエンコードする必要がありますか?