如何通过电子邮件在asp.net c#中发送HTML表单?

时间:2013-03-07 06:02:15

标签: c# javascript asp.net pdf snapshot

在我的ASP.Net C#网站上,我收到了一份订单,我希望通过提交方式通过电子邮件发送。表单元素是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>

任何帮助都会受到高度赞赏(^ _ ^)

Kardo

2 个答案:

答案 0 :(得分:0)

如果您希望获取html表单并生成PDF,我最喜欢的工具是wkhtmltopdf。你必须在你的服务器上安装这个(我很想知道其他人是否找到了wkhtmltopdf的.net库!:]。)。

安装后,其命令行非常简单:

wkhtmltopdf www.myhomepage.com output.pdf

从.net调用它也很简单,例如: Calling wkhtmltopdf to generate PDF from HTML

还有像iTextSharp这样的.net库,可用于生成pdfs和其他静态输出类型。

答案 1 :(得分:0)

听起来像一个漫长的过程。提交,转换为pdf,保存到硬盘,随身携带电子邮件,发送电子邮件。你可以这样做,但我会考虑发送一封HTML电子邮件。您只需将数据(订单)存储在数据库中,然后在预先形成的电子邮件模板上发送电子邮件。让最终用户将其打印为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或你选择的任何东西。将它保存到你的硬盘驱动器。创建您的电子邮件并将文件附加为电子邮件附件(或者只发送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();

我希望在某种程度上有所帮助...