SITECORE MANIA 開発者向け技術ブログ

コードサンプル

小島

小島

Sitecore Formsでファイルをメールに添付する方法

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のバージョンによって実装されている機能が異なります。

この記事を読んだ人はこちらの記事も読んでます

Sitecore導入に関するご相談・資料ダウンロード

導入をご検討・ご依頼の方や、サービスについてご不明点がございましたらお気軽にお問い合わせください。

Sitecoreの運用問題を解決する

既にSitecoreを導入しているお客様向けサービス