Вам нужен ваш цикл внутри адрес электронной почты:
def sendEmail = {
def documentsInstances = Documents.getAll(params.list('ids[]'))
def s3Service = new AmazonS3Service()
asyncMailService.sendMail {
multipart true
to documentsInstance.author.emailAddress
subject 'Test';
html '<body><u>Test</u></body>';
// loop over attachments
documentsInstances.each{ documentsInstance->
attachBytes documentsInstance.filename , 'text/plain', s3Service.getBytes(session.uid, documentsInstance.filename);
}
}
}
Это должно прикрепить несколько файлов.
Если выдается ошибка о невозможности найти метод attachBytes
, вам может потребоваться явно вызвать owner.attachBytes
вместо этого, что должно ссылаться на внешнее закрытие sendMail
.
Обновление на основе комментариев:
Плагин Async выглядит так, как будто он относится к обычному почтовому плагину. Документы обычного почтового плагина описывают как использовать несколько вложений .
Это будет выглядеть примерно так:
// loop over attachments
documentsInstances.each{ documentsInstance->
attach documentsInstance.filename , 'text/plain', s3Service.getBytes(session.uid, documentsInstance.filename);
//^^^^^^ Notice, just 'attach', not 'attachBytes'
}
Я не знаю, какой плагин S3 вы используете, но если есть способ извлечь из него InputStreamSource
, похоже, что вы можете передавать байты непосредственно в почтовый плагин, вместо загрузки их в память .