3 replies
I am trying to send as an html page an email on Page_Load after all the dynamic controls are rendered. It works and I get sent the email... but its hundreds of them. It's somehow looping through the sendEmail() function and I don't know why. If I add a button to the page and send the email in its on_click event it works and only sends 1 email. I'm not sure what the problem is?

Here is the code I'm just going to copy and paste the whole thing in:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.IO;

namespace mceTickets
{
    public partial class design : System.Web.UI.Page
    {

        public String name;
        public String email;
        public Int32 price;
        public Int32 numTickets;
        public String usertocredit;

        public string bannerURL;
        public string ticketName;
        public string eventName;
        public string venueName;
        public string venueAddress;
        public string venueAddress2;
        public string city;
        public string startDay;
        public string startMonth;
        public string startYear;
        public string startMinute;
        public string startHour;

        protected void Page_Load(object sender, EventArgs e)
        {
            
            name = Request.QueryString["Name"];
            email = Request.QueryString["Email"];
            price = Convert.ToInt32(Request.QueryString["p1"]);
            numTickets = Convert.ToInt32(Request.QueryString["num1"]);
            usertocredit = Request.QueryString["User"];

            string promoterName = "";
            int index = usertocredit.IndexOf("Event");
            if (index > 0)
            { promoterName = usertocredit.Substring(0, index); }

            bannerURL = "http://www.mcetickets.com/images/ticket_banner.jpg";

            ReadXmlFile(Server.MapPath("~/Promoters/NewEvent/" + usertocredit));

            readFirstTicket();
            
            sendEmail()
        }

        private void readFirstTicket()
        {
            for (int i = 0; i < numTickets; i++)
            {
                Guid g = Guid.NewGuid();
                string random = g.ToString();

                Image image1 = new Image();
                image1.ID = "Image1";
                image1.Height = 200;
                image1.Width = 37;
                image1.ImageUrl = bannerURL;

                Image image2 = new Image();
                image2.ID = "Image2";
                image2.ImageUrl = "http://www.mcetickets.com/images/ticket_logo.jpg";

                Image barCode = new Image();
                barCode.ID = "myBarCode";
                barCode.ImageUrl = "http://barcode.tec-it.com/barcode.ashx?code=QRCode&modulewidth=fit&data=" + random.Substring(0, 10) + "&dpi=96&imagetype=gif&rotation=0&color=&bgcolor=&fontcolor=&quiet=0&qunit=mm&eclevel=";

                Label label13 = new Label();
                label13.ID = "Label13";
                label13.Text = "Ticket Name:";

                Label label10 = new Label();
                label10.ID = "Label10";
                label10.Text = ticketName;

                Label label7 = new Label();
                label7.ID = "Label7";
                label7.Text = "Price:";

                Label label9 = new Label();
                label9.ID = "Label9";
                label9.Text = "£" + price.ToString();

                Label label14 = new Label();
                label14.ID = "Label14";
                label14.Text = "Event Name:";

                Label label15 = new Label();
                label15.ID = "Label15";
                label15.Text = "Event Date:";

                Label label4 = new Label();
                label4.ID = "Label4";
                label4.Text = eventName;

                Label label5 = new Label();
                label5.ID = "Label5";
                label5.Text = startMonth + " " + startDay + ", " + startYear + " at " + startHour + ":" + startMinute;

                Label label1 = new Label();
                label1.ID = "Label1";
                label1.Text = venueName;

                Label label2 = new Label();
                label2.ID = "Label2";
                label2.Text = venueAddress;

                Label label12 = new Label();
                label12.ID = "Label12";
                label12.Text = venueAddress2;

                Label label3 = new Label();
                label3.ID = "Label3";
                label3.Text = city;

                Label label16 = new Label();
                label16.ID = "Label16";
                label16.Text = "For: ";

                Label label11 = new Label();
                label11.ID = "Label11";
                label11.Text = name;

                Label label6 = new Label();
                label6.ID = "Label6";
                label6.Text = "www.mcetickets.com";

                PlaceHolder1.Controls.Add(new LiteralControl("<table class='style1'><tr>"));
                PlaceHolder1.Controls.Add(new LiteralControl("<td class='style2' valign='top' rowspan='3'>"));
                PlaceHolder1.Controls.Add(image1);
                PlaceHolder1.Controls.Add(new LiteralControl("</td><td class='style3'>"));
                PlaceHolder1.Controls.Add(label13);
                PlaceHolder1.Controls.Add(new LiteralControl("&nbsp;"));
                PlaceHolder1.Controls.Add(label10);
                PlaceHolder1.Controls.Add(new LiteralControl("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));
                PlaceHolder1.Controls.Add(label7);
                PlaceHolder1.Controls.Add(new LiteralControl("&nbsp;"));
                PlaceHolder1.Controls.Add(label9);
                PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
                PlaceHolder1.Controls.Add(label14);
                PlaceHolder1.Controls.Add(new LiteralControl("&nbsp;"));
                PlaceHolder1.Controls.Add(label4);
                PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
                PlaceHolder1.Controls.Add(label15);
                PlaceHolder1.Controls.Add(new LiteralControl("&nbsp;"));
                PlaceHolder1.Controls.Add(label5);
                PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
                PlaceHolder1.Controls.Add(new LiteralControl("</td><td rowspan='3' class='style4' >"));
                PlaceHolder1.Controls.Add(image2);
                PlaceHolder1.Controls.Add(new LiteralControl("</td></tr><tr><td class='style3'>"));
                PlaceHolder1.Controls.Add(barCode);
                PlaceHolder1.Controls.Add(new LiteralControl("</td></tr><tr><td class='style3'>"));
                PlaceHolder1.Controls.Add(label1);
                PlaceHolder1.Controls.Add(label2);
                PlaceHolder1.Controls.Add(label12);
                PlaceHolder1.Controls.Add(label3);
                PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
                PlaceHolder1.Controls.Add(label16);
                PlaceHolder1.Controls.Add(label11);
                PlaceHolder1.Controls.Add(new LiteralControl("&nbsp;- "));
                PlaceHolder1.Controls.Add(label6);
                PlaceHolder1.Controls.Add(new LiteralControl("</td></tr></table>"));
                PlaceHolder1.Controls.Add(new LiteralControl("<br /><br />"));
            }
        }

        private void ReadXmlFile(string fileName)
        {

            System.Xml.XmlTextReader ab = new System.Xml.XmlTextReader(fileName);

            while (ab.Read())
            {

                while (ab.ReadToFollowing("TicketName"))
                {
                    ticketName = ab.ReadElementContentAsString();
                }
            }
            ab.Close();

            System.Xml.XmlTextReader tname2 = new System.Xml.XmlTextReader(fileName);

            while (tname2.Read())
            {

                while (tname2.ReadToFollowing("TicketName2"))
                {
                    ticketName2 = tname2.ReadElementContentAsString();
                }
            }
            tname2.Close();

            System.Xml.XmlTextReader tname3 = new System.Xml.XmlTextReader(fileName);

            while (tname3.Read())
            {

                while (tname3.ReadToFollowing("TicketName3"))
                {
                    ticketName3 = tname3.ReadElementContentAsString();
                }
            }
            tname3.Close();

            System.Xml.XmlTextReader xReader = new System.Xml.XmlTextReader(fileName);

            while (xReader.Read())
            {

                while (xReader.ReadToFollowing("EventName"))
                {
                    eventName = xReader.ReadElementContentAsString();
                }
            }
            xReader.Close();

            System.Xml.XmlTextReader a = new System.Xml.XmlTextReader(fileName);

            while (a.Read())
            {

                while (a.ReadToFollowing("VenueName"))
                {
                    venueName = a.ReadElementContentAsString() + ", ";
                }
            }
            a.Close();

            System.Xml.XmlTextReader b = new System.Xml.XmlTextReader(fileName);

            while (b.Read())
            {

                while (b.ReadToFollowing("VenueAddress"))
                {
                    venueAddress = b.ReadElementContentAsString() + ", ";
                }
            }
            b.Close();

            System.Xml.XmlTextReader c = new System.Xml.XmlTextReader(fileName);

            while (c.Read())
            {

                while (c.ReadToFollowing("VenueAddress2"))
                {
                    string content = c.ReadElementContentAsString();
                    if (content != "")
                    {
                        venueAddress2 = content;
                    }
                }
            }
            c.Close();

            System.Xml.XmlTextReader d = new System.Xml.XmlTextReader(fileName);

            while (d.Read())
            {

                while (d.ReadToFollowing("VenueTownCity"))
                {
                    city = d.ReadElementContentAsString();
                }
            }
            d.Close();

            System.Xml.XmlTextReader u = new System.Xml.XmlTextReader(fileName);

            while (u.Read())
            {

                while (u.ReadToFollowing("StartDay"))
                {
                    startDay = u.ReadElementContentAsString();
                }
            }
            u.Close();

            System.Xml.XmlTextReader ua = new System.Xml.XmlTextReader(fileName);

            while (ua.Read())
            {

                while (ua.ReadToFollowing("StartMonth"))
                {
                    startMonth = ua.ReadElementContentAsString();
                }
            }
            ua.Close();

            System.Xml.XmlTextReader us = new System.Xml.XmlTextReader(fileName);

            while (us.Read())
            {

                while (us.ReadToFollowing("StartYear"))
                {
                    startYear = us.ReadElementContentAsString();
                }
            }
            us.Close();

            System.Xml.XmlTextReader ug = new System.Xml.XmlTextReader(fileName);

            while (ug.Read())
            {

                while (ug.ReadToFollowing("StartMinute"))
                {
                    startMinute = ug.ReadElementContentAsString();
                }
            }
            ug.Close();

            System.Xml.XmlTextReader uz = new System.Xml.XmlTextReader(fileName);

            while (uz.Read())
            {

                while (uz.ReadToFollowing("StartHour"))
                {
                    startHour = uz.ReadElementContentAsString();
                }
            }
            uz.Close();

        }

        private void sendEmail()
        {
            WebClient myClient = new WebClient();
            string myPageHTML = null;
            byte[] requestHTML;
            // Gets the url of the page
            string currentPageUrl = Request.Url.ToString();

            UTF8Encoding utf8 = new UTF8Encoding(); 

            requestHTML = myClient.DownloadData(currentPageUrl);

            myPageHTML = utf8.GetString(requestHTML);

            const string SERVER = "relay-hosting.secureserver.net";
            MailMessage objMail = new MailMessage();
            objMail.From = new MailAddress("from@fromAddress.com");
            objMail.To.Add(new MailAddress("to@toAddress.com"));
            objMail.IsBodyHtml = true;
            objMail.Subject = "MCE Order Confirmation";
            objMail.Priority = System.Net.Mail.MailPriority.High;
            objMail.Body = myPageHTML;
            SmtpClient Client = new SmtpClient(SERVER, 25);
            Client.Credentials = CredentialCache.DefaultNetworkCredentials;

            try
            {
                Client.Send(objMail);
            }
            catch
            {
                Response.Write("There was an error sending you your tickets!");
            }
        }

    }
}
#aspnet #email
  • Profile picture of the author jacktackett
    Sean, are there any post backs happening maybe with rendering the controls? It looks like sendEmail is being called no matter what is happening. You want to test for a post back to prevent calling sendEmail all the time. That may stop the issue.
    Good luck
    Kack
    Signature
    Let's get Tim the kidney he needs!HELP Tim
    Mega Monster WSO for KimW http://ow.ly/4JdHm


    {{ DiscussionBoard.errors[7094723].message }}
    • Profile picture of the author sean3838
      You are absolutely right thank you. I am trying to use javascript window.onload to execute the sendEmail() function after the page has rendered. It works the only problem now is it reloads the page every time so the window.onload keeps getting called which means the sendEmail() function keeps getting called also haha. Anyway around this you can see?
      {{ DiscussionBoard.errors[7094933].message }}

Trending Topics