Avatar billede jmarkling Nybegynder
09. juni 2005 - 14:37 Der er 7 kommentarer og
1 løsning

Opbygning af email tekst, driller.

Jeg har nogle emails som mit system læser fra nogle tekst filer og skal sende til nogle brugere... Strukturen driller mig bare. æøå kommer ikke med og \n bliver skrevet i stedet for at virke. Jeg læser fra filerne på følgende måde:

public string ReadTextFile(string fileName)
{
string returnText = "";
string tmpText;
try
{
string filePath = fileName+".txt";
StringWriter sw = new StringWriter();
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader(filePath))
{
    // Read and display lines from the file until the end of
    // the file is reached.
    while ((tmpText = sr.ReadLine()) != null)
    {
        returnText = returnText + tmpText;
    }
  }
}
catch (Exception e)
{
returnText = e.Message;
}
return returnText;
}

Og klargør så hele teksten på følgende måde i en anden funktion: hvor resultatet af ovenstående kommer ind som argument.

public string PrepEmailText(string name_recv, string name_sender, string firstParagraf, string secondParagraf, string footerStamp )
{
string returnEmailTxt;
returnEmailTxt = "Kære "+ name_recv+"\n\n";
returnEmailTxt = returnEmailTxt + firstParagraf+"\n\n";
returnEmailTxt = returnEmailTxt +"www.urlforeksperten.dk\n";   
returnEmailTxt = returnEmailTxt + secondParagraf+"\n\n";
returnEmailTxt = returnEmailTxt + "Med Venlig Hilsen "+ name_sender+"\n\n\n\n";
returnEmailTxt = returnEmailTxt + footerStamp;
return returnEmailTxt;
}

De n'er der angivet i ovenstående fatter Email-browseren godt, men de n'er der kommet ind som string argumenter til funktion bliver vist.

Hvad har jeg sjusket med ?
Jeg bruger text som BodyFormat til min EmailMessage
Avatar billede thomashove Nybegynder
09. juni 2005 - 14:47 #1
i stedet for \n prøv at bruge

returnEmailTxt = "Kære "+ name_recv + vbCrLf;

ved ikke om vbCrLf er specifik for VB (som jeg bruger) men ellers må der findes en tilsvarende i C#
Avatar billede thomashove Nybegynder
09. juni 2005 - 14:55 #2
måske disse er bedre for c# ;-)

System.Environment.NewLine

eller

string myString = "This is" + Microsoft.VisualBasic.vbCrLf + "a string.";
Avatar billede jmarkling Nybegynder
09. juni 2005 - 15:07 #3
\n virker fint nok i linjen returnEmailTxt = "Kære "+ name_recv+"\n\n"; n'erne virker bare ikke i de argumenter der kommer ind, så som "firstParagraf", hvor æøå heller virker.
vbCrlf virker ikke i C# og System.Environment.NewLine er jo fuldstændig det samme som at skrive \n ... så det kan jeg jo heller ikke inlejere i mine tekst filer... Desværre. :(
Avatar billede jmarkling Nybegynder
09. juni 2005 - 15:29 #4
using (StreamReader sr = new StreamReader(filePath, System.Text.Encoding.GetEncoding("ISO-8859-1")))  så læser den æøå.
Avatar billede nielle Nybegynder
09. juni 2005 - 18:12 #5
For det første, at skrive System.Environment.NewLine er ikke det samme som at skrive ”\n”. Hvis din applikation køre på en linux-platform resultere den i ”\n”, på en Windows platform resultere den i ”\r\n” og (angiveligt) hvis det er på en Mac-platform så resultere den i et ”\r”. NewLine er m.a.o. platformsafhængig.

Imidlertid er det vigtigt at man er klar over at det ikke er afsenderplatformen som er den vigtige, men derimod modtagerplatformen, og den kan man jo ikke influerer via sin kode. Den eneste mulighed man har er faktisk at simpelthen overholde email-standarden som siger at linjesktift skal angives med ”\r\n”. Det er derfor at man f.eks. har vbCrLf i VB Script. Man har ikke noget tilsvarende i .Net, og der må man simpelthen skrive ”\r\n” i sin tekst.

Problemet med de \n’er som kommer ind via variablene og vises som teksten ”\n” i stedet for linjeskift, skyldes med garanti at der rent faktisk står 2 tegn i den tekst variablen indeholder, et ”\” tegn efterfulgt af et ”n” tegn, i stedet for et enkelt tegn (ASCII 10).

En mulig måde at løse dette på er ved at lave en Replace på variablen:

dinVar = dinVar(@”\n”, ”\r\n”);

Læg mærke til @’et foran den første streng. Den er vigtig.

Problemet med de manglende danske bogstaver skyldes sandsynligvis at det går galt allerede når du læser teksten fra filen. Prøv at angive en encoding når du åbner filen:

using (StreamReader sr = new StreamReader(filePath, System.Text.Encoding.UTF8))

Under System.Text.Encoding.??? er der et par andre muligheder. Hvis de ikke virker så kan du i stedet prøve med:

using (StreamReader sr = new StreamReader(filePath, System.Text.Encoding.GetEncoding("ISO-8859-1")))

Din kode, revideret:

public string ReadTextFile(string fileName)
{
    string returnText = "";
    string tmpText;
    try
    {
        string filePath = fileName+".txt";
        StringWriter sw = new StringWriter();
        // Create an instance of StreamReader to read from a file.
        // The using statement also closes the StreamReader.
        using (StreamReader sr = new StreamReader(filePath, System.Text.Encoding.GetEncoding("ISO-8859-1")))
        {
            // Read and display lines from the file until the end of
            // the file is reached.
            while ((tmpText = sr.ReadLine()) != null)
            {
                returnText = returnText + tmpText;
            }
        }
    }
    catch (Exception e)
    {
        returnText = e.Message;
    }

    return returnText;
}

public string PrepEmailText(string name_recv, string name_sender, string firstParagraf, string secondParagraf, string footerStamp)
{
    string vbCrLf = "\r\n";
    string returnEmailTxt;

    returnEmailTxt = "Kære "+ name_recv + vbCrLf + vbCrLf;
    returnEmailTxt += firstParagraf + vbCrLf + vbCrLf;
    returnEmailTxt += "www.urlforeksperten.dk" + vbCrLf;
    returnEmailTxt += secondParagraf + vbCrLf + vbCrLf;
    returnEmailTxt += "Med Venlig Hilsen " + name_sender + vbCrLf + vbCrLf + vbCrLf + vbCrLf;
    returnEmailTxt += footerStamp;

    return returnEmailTxt;
}
Avatar billede jmarkling Nybegynder
10. juni 2005 - 12:53 #6
smid et svar neille.
Dit råd fik det til at køre, jeg lavede en
dinVar = dinVar.Replace(@"newline", "\r\n"); og så skrev jeg "newline" ind i mine tekst filer. Begyndte også at bruge stringbuilder i stedet for += da det skulle give en bedre performance...
Avatar billede nielle Nybegynder
10. juni 2005 - 12:57 #7
Svar :^)
Avatar billede nielle Nybegynder
24. juni 2005 - 18:30 #8
Lukketid?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester