1

私のASP.Net C# Webサイトで、送信して電子メールで送信したい注文フォームを取得しました。フォーム要素は HTML で、計算はクライアント側で JavaScript によって行われ、多くのフォーム要素があります。

フォームとその内容をユーザーが PDF または JPG として電子メールで送信できるようにしたいと考えています。

おそらく、フォームはクライアント側から画像または印刷ファイルとしてスナップショットとしてキャプチャする必要があり、そのファイルはサーバー側から電子メールで送信できます。

実用的な解決策を教えていただければ幸いです。サンプルとしてのコードの一部を次に示します。

   <div id="cblDomain">
    <input id="cblDomain_1" value="10" onchange="subsumDomain()" type="checkbox" name="cblDomain" checked="checked"><label for="cblDomain_1">com - 10</label><br>
    <input id="cblDomain_2" value="10" onchange="subsumDomain()" type="checkbox" name="cblDomain"><label for="cblDomain_2">net - 10</label><br>
    <input id="cblDomain_3" value="5" onchange="subsumDomain()" type="checkbox" name="cblDomain"><label for="cblDomain_3">info - 5</label><br>
    <input id="cblDomain_4" value="10" onchange="subsumDomain()" type="checkbox" name="cblDomain"><label for="cblDomain_4">me - 10</label>
   </div>

<select name="ddlDomainPeriod" onchange="subsumDomain()" id="ddlDomainPeriod">
    <option value="1">1 yr</option>
    <option value="2">2 yrs</option>
    <option value="3">3 yrs</option>
    <option value="4">4 yrs</option>
    <option value="5">5 yrs</option>
</select>
 <div name="sum" id="sumDomain">10</div>

<script type="text/javascript">
    function subsumDomain() {
        var _sum = 0;
        var _cblDomain = document.getElementsByName('cblDomain');
        for (i = 0; i < _cblDomain.length; i++) {
            if (_cblDomain[i].checked == true)
                _sum += Number(_cblDomain[i].value);
        }
        var _domainPeriod = Number(document.getElementById('ddlDomainPeriod').options[document.getElementById('ddlDomainPeriod').selectedIndex].value);
        document.getElementById('sumDomain').innerHTML = moneyConvert(_sum * _domainPeriod);

        subTotal();
    }

    function subsumHost() {
        var _hostPrice = Number(document.getElementById('ddlHost').options[document.getElementById('ddlHost').selectedIndex].value);
        var _hostPeriod = Number(document.getElementById('ddlHostPeriod').options[document.getElementById('ddlHostPeriod').selectedIndex].value);
        _hostDiscount = 0;
        if (_hostPeriod > 1)
            _hostDiscount = (_hostPrice * _hostPeriod) * 0.2;
        document.getElementById('sumHost').innerHTML = moneyConvert((_hostPrice * _hostPeriod) - _hostDiscount);

        subTotal();
    }
</script>

どんな親切な助けでも大歓迎です(^_^)

カルド

4

2 に答える 2

1

長いプロセスのように聞こえます。送信、PDFへの変換、HDDへの保存、メールへの添付、メールの送信。あなたはそれを行うことができますが、私はHTMLメールを送信することを検討します。データ(注文)をDBに保存し、事前に作成された電子メールテンプレートで電子メールを送信するだけです。エンドユーザーにPDFや紙などに印刷させます...

あなたが本当にpdfのことをしたいのなら、あなたはすでに提案されたようにまともなライブラリを見つける必要があるでしょう。

さて、これはあなたが電子メールを送る方法です。再利用可能なメールクラスを作成するのが好きです。それがあなたのニーズに合わない場合でも、あなたはそうする必要はありません。でもねえ、もしあなたがメールを作るつもりなら、それをオブジェクトにしてみませんか?

using System.Net.Mail;
public class Email
    {

        public MailAddress From { get; set; }
        public MailAddress To { get; set; }
        public string Password { get; set; }
        public string Subject { get; set; }
        public string Body { get; set; }
        public string Host { get; set; }
        public int Port { get; set;}
        public List<Attachment> attachmentsList = new List<Attachment>();


        public void send()
        {
            //send email
            var smtp = new SmtpClient
            {
                Host = Host,
                Port = Port,
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                Credentials = new NetworkCredential(From.Address, Password),
                Timeout = 120000 //2mins
            };

            MailMessage message = new MailMessage(From.Address, To.Address);
            message.Subject = Subject;
            message.Body = Body;
            message.IsBodyHtml = true;

            foreach(Attachment attachment in attachmentsList){
                if (attachment != null)
                {
                    message.Attachments.Add(attachment);
                }                
            }

            try
            {
                smtp.Send(message);
            }
            catch(Exception e){

                throw e;
            }
        }
    }

次に、PDFまたは選択したものを作成する必要があります。HDDのどこかに保存します。メールを作成し、ファイルをメールの添付ファイルとして添付します(または、HTML本文を送信します。stringReplace()を使用して、メールテンプレートの値を置き換えます(#price #address #companynameなど)。

Email newMail = new Email();

newMail.From = new MailAddress("someone@somewhere.com", "Your Name");
newMail.Password = "your outgoing mail password");
newMail.To = new MailAddress("someone@somewhere.com", "Recipient Name");
newMail.Subject = "Your Subject";
newMail.Body = "Your email body";
newMail.Host = smtp.example.com;
newMail.Port = 123;

//add the attachments (example)
 foreach (string fileLocation in AttachmentsList)
 {
 newMail.attachmentsList.Add(new Attachment(fileLocation));
 }

 newMail.send();

私はそれが何らかの形で役立つことを願っています...

于 2013-03-07T08:11:04.960 に答える
0

HTML フォームを取得して PDF を生成する場合、私のお気に入りのツールはwkhtmltopdfです。ただし、これをサーバーにインストールする必要があります(他の人がwkhtmltopdfの.netライブラリを見つけたかどうか知りたいです!:])。

インストールが完了すると、コマンドラインは非常に簡単です。

wkhtmltopdf www.myhomepage.com output.pdf

.net から呼び出すのも簡単です。例: wkhtmltopdf を呼び出して HTML から PDF を生成する

PDFやその他の静的出力タイプを生成するために使用できるiTextSharpなどの .net ライブラリもあります。

于 2013-03-07T06:31:46.220 に答える