Sitecore Formsで作成したフォームには、名前やメールアドレスだけでなく、ファイル(画像や書類など)も添付できます。
フォーム送信時、ユーザーが入力した内容を確認するメールを作成して送信します。
以下のサンプルコードは、フォームにファイルが添付されていれば、そのファイルもメールに添付して送信する処理を実装しています。
サンプルコード
1. メール作成
フォームに入力された値をもとにメールを作成する処理
// Subject(件名)
emailMessage.Subject = ReplaceKeywords(emailTemplate.Subject, formSubmitContext);
// From(差出人)
emailMessage.From = new MailAddress(ReplaceKeywords(emailTemplate.From, formSubmitContext), emailTemplate.Sender);
// To(送信先)
FillMailAddressCollection(listMailTo, emailMessage.To);
// Body(本文)
if (!string.IsNullOrEmpty(emailTemplate.MessageRichText))
{
emailMessage.Body = GetBody(emailTemplate, formSubmitContext);
emailMessage.IsBodyHtml = true;
}
2. ファイル取得
フォームで送信されたファイルを取得する処理
var uploadFieldList = formSubmitContext.Fields.Where(f => f.GetType() == typeof(FileUploadViewModel));
var attachments = new List();
if (uploadFieldList != null && uploadFieldList.Any())
{
foreach (var uploadField in uploadFieldList)
{
if (uploadField != null)
{
var uploadFieldVM = (FileUploadViewModel)uploadField;
if (uploadFieldVM.Files != null && uploadFieldVM.Files.Count > 0)
{
for (var i = 0; i < uploadFieldVM.Files.Count; i++)
{
var uploadFile = uploadFieldVM.Files[i];
if (uploadFile.InputStream != null && uploadFile.InputStream.Length > 0)
{
uploadFile.InputStream.Position = 0;
// 添付ファイルの必要な情報を読み取り取得する
attachments.Add(new Attachment(
uploadFile.InputStream,
uploadFile.FileName,
uploadFile.ContentType
));
}
else
{
// ストリームが無効な場合のエラーログ
logger.LogError("ストリームが無効です。");
}
}
}
}
}
}
3. メールに添付
ファイルを添付する処理
if (attachments != null && attachments.Count > 0)
{
foreach (var attachment in attachments)
{
emailMessage.Attachments.Add(attachment);
}
}
上記でフォームに入力されたファイルを添付することができます。
ファイルをアップロードするフォームを作成する際にぜひ試してみてください。
実際の画像
ファイルアップロード
添付ファイル
参考情報
コード編集にあたりこちらを参考にさせていただきました。
Sitecore Forms – Add attachments in Send Email Submit Action
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。