Comment lire HTML sur une page Web et l'utiliser comme corps de HTML automatique Responder E-Mail

StackOverflow https://stackoverflow.com/questions/1507351

  •  19-09-2019
  •  | 
  •  

Question

Je travaille sur un e-mail de répondeur automatique HTML. S'il y a un moyen plus simple que ce que je fais s'il vous plaît laissez-moi savoir.

Jusqu'à présent, je l'ai construit « pagename.aspx » et je lis cette page dans une variable de chaîne, utilisez cette variable que le corps du courrier. Cela fonctionne.

La page accepte éventuellement un QueryString appelé "leadID". Il est utilisé pour extraire des données à partir d'une base de données et remplir les champs sur cette page. Cela fonctionne aussi bien quand je parcourir manuellement à la page - pagename.aspx leadid = xyz

Mon problème / Question est , comment passe-je faire querystring à la page et retourner la sortie HTML résultant de la page dans une chaîne, qui peut ensuite être utilisé comme corps de mon email.

Encore une fois, s'il y a une meilleure façon s'il vous plaît laissez-moi savoir. J'utilise LINQ to SQL, VB.NET et ASP.NET 3.5.

Merci un million.

Était-ce utile?

La solution

Le plus simple est juste de faire un WebRequest à lui:

string url = "...";
string result;

HttpWebRequest webrequest = (HttpWebRequest) HttpWebRequest.Create(url);
webrequest.Method        = "GET";
webrequest.ContentLength = 0;

WebResponse response = webrequest.GetResponse();

using(StreamReader stream = new StreamReader(response.GetResponseStream())){
    result = stream.ReadToEnd();
}

Autres conseils

Comme décrit dans cet article , vous pouvez utiliser le HttpWebRequest classe pour récupérer le flux de données à partir de votre page « pagename.aspx? leadID = 1 ». Mais cela pourrait causer un peu de frais généraux à votre demande en raison de la requête HTTP supplémentaire.

Ne serait-il possible / mieux générer votre contenu HTML à partir d'une simple classe? Quel contenu génère votre page?

Edit: Comme demandé par Khalid est ici une simple classe pour générer un fichier HTML dynamique à l'aide de votre paramètre leadID et un contrôle GridView. Il est seulement un exemple, vous devez coutume et rendre plus réutilisable:

using System;
using System.Text;
using System.IO;
using System.Web.UI.WebControls;
using System.Web.UI;

public class PageBroker
{

    /*
     * How to use PageBroker:
     * 
     *  string leadID = "xyz"; // dynamic querystring parameter
     *  string pathToHTML = Server.MapPath(".") + "\\HTML\\leadForm.html"; //more detail about this file below
     *  PageBroker pLeadBroker = new PageBroker(pathToHTML, leadID);  
     *  Response.Write(pLeadBroker.GenerateFromFile()); // will show content of generated page
     */

    private string _pathToFile;
    private StringBuilder _fileContent;
    private string _leadID;

    public PageBroker(string pathToFile, string leadID)
    {
        _fileContent = new StringBuilder();
        _pathToFile = pathToFile;
        _leadID = leadID;
    }

    public string GenerateFromFile() {
        return LoadFile();
    }
    private string LoadFile()
    {
        // Grab file and load content inside '_fileContent'
        // I used an html file to create the basic structure of your page
        // but you can also create
        // a page from scratch.
        if (File.Exists(_pathToFile))
        {
            FileStream stream = new FileStream(_pathToFile, FileMode.Open, FileAccess.Read);
            StreamReader reader = new StreamReader(stream);
            while (reader.Peek() > -1)
                _fileContent.Append(reader.ReadLine() + "\n");
            stream.Close();
            reader.Close();

            InjectTextContent();
            InjectControlsContent();
        }        
        return _fileContent.ToString();
    }

    // (Ugly) method to inject dynamic values inside the generated html
    // You html files need to contain all the necesary tags to place your
    // content (for example: '__USER_NAME__')
    // It would be more OO if a dictionnary object was passed to the 
    // constructor of this class and then used inside this method 
    // (I leave it hard-coded for the sake of understanding but 
    // I can give you a more detailled code if you need it).
    private void InjectTextContent() {
        _fileContent.Replace("__USER_NAME__", "Khalid Rahaman");
    }

    // This method add the render output of the controls you need to place
    // on the page. At this point you will make use of your leadID parameter,
    // I used a simple array with fake data to fill the gridview.
    // You can add whatever control you need.
    private void InjectControlsContent() {
        string[] products = { "A", "B", "C", "D" };
        GridView gvProducts = new GridView();
        gvProducts.DataSource = products;
        gvProducts.DataBind();

        // HtmlTextWriter is used to write HTML programmatically. 
        // It provides formatting capabilities that ASP.NET server 
        // controls use when rendering markup to clients 
        // (http://msdn.microsoft.com/en- us/library/system.web.ui.htmltextwriter.aspx)
        // This way you will be able to inject the griview's 
        // render output inside your file.
        StringWriter gvProductsWriter = new StringWriter();
        HtmlTextWriter htmlWrit = new HtmlTextWriter(gvProductsWriter);
        gvProducts.RenderControl(htmlWrit);
        _fileContent.Replace("__GRIDVIEW_PRODUCTS__", gvProductsWriter.ToString());
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top