2017-03-14 9 views
1

Groovyを使用するシステムで顧客に電子メールを送信するプロセスを書いています(apache.commons.mail.*のlibsが既にインストールされています。GroovyとApacheのコモンズを使用してBase64文字列からイメージの添付ファイルを送信

問題は、画像がbase64でエンコードされた文字列として渡されてしまうことです。私はそれらを画像として保存し、URL(here are some examples of sending an email with attachments)を介して添付することを検討しましたが、再エンコードするためのデコードの浪費のようです。画像を直接添付する方法はありますか?

私はsimilar questionsa fewSO postsを見つけたが、それらのいずれかは、私の状況のた​​めに不十分な答えを与えるか、私はへのアクセスを持っていない他のバージョンのJava /ライブラリに依存するように見えます。

編集:私は今それをしていますのはここ

は(this postにJerryPさんのコメントのおかげで)です:

だから、
def my_img = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQAB..."; 
byte[] img_bytes = b64_data.src.drop(b64_data.src.indexOf(',')+1).decodeBase64(); // This extracts the encoded part 
def type = b64_data.src.substring(b64_data.src.indexOf(':') + 1, b64_data.src.indexOf(';')); // This extracts the data type from the long base64 string (i.e. 'data:image/jpeg;base64,/9j/4AAQSkZJRgABA...') 

enc_attachments = ByteArrayDataSource(img_bytes, type); 

、私は今、私のイメージのByteArrayDataSourceを持っていますが、the embed calls in apache commonsを取ることはありませんparamとしてのByteArrayDataSource。

答えて

0

わかりました。上記が実際に動作し、私はByteArrayDataSourceの前に 'new'というキーワードを見逃してしまったので、送信するときに奇妙なことがありました。最終的なコードは次のようなものです:

def my_img = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQAB..."; 
def filename = "foo.jpg"; 
byte[] img_bytes = my_img.drop(my_img.indexOf(',')+1).decodeBase64(); // This extracts the encoded part 
def type = my_img.substring(my_img.indexOf(':') + 1, my_img.indexOf(';')); // This extracts the data type from the long base64 string (i.e. 'data:image/jpeg;base64,/9j/4AAQSkZJRgABA...') 

enc_attachment = new ByteArrayDataSource(img_bytes, type); 

// ... set up email stuff here 

def cid = email.embed(enc_attachment, filename); 
attachment_str += '<img src="cid: ' + cid + '" />'; // email.embed() returns a random 'cid' 
// put attachment_str in your message before sending in order to embed. 
関連する問題