13. september 2010 - 13:11Der er
16 kommentarer og 1 løsning
Tilføje vedhæftede filer til mit nyhedsbrev
Goddag eksperter,
Jeg har et nyhedsbrevs-script, som fungerer som det skal. Jeg kunne dog godt tænke mig at tilføje muligheden for at vedhæfte filer til det. Men hvordan gør jeg det på min side uden at lave om på opbygningen og måden mailsne sendes ud?
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Commentasks;
public partial class newsletter_directmail : System.Web.UI.Page { int pause_1 = 0; int pause_2 = 100; int counter = 0; string QueryString; string Subject; string Content; Commentasks.Commentasks cmt = new Commentasks.Commentasks(); DataTable dt; DataTableReader dtr;
if (attachments.Items.Count != 0) { for (int i = 0; i <= attachments.Items.Count - 1; i++) { attach = new Attachment("D:/SL-IMG/stofa.jpg"); mail.Attachments.Add(attach); } }
Alle har været .Net rookies engang og på nogle områder er jeg det sgu endnu :-) Så det er godt man har eksperten.dk...
Du gør nogle ting forkert.
1. Du prøver at oprette en mailmessage objekt hvor du angiver attachment som parameter. Det kan man ikke, deraf din Compiler fejl.
2. Du forsøger så at loope igennem en streng 'attachments'. Det kan man heller ikke. Jeg kan heller ikke lige se logikken i dit attachment loop.
3. Hvis du har attachment som en streng parameter til din metode, så kan du kun vedhæfte en fil. Eller samme fil mange gange :-) Måske var det en ide at lave den parameter om til en collection af attachments eller et string array.
I hvert fald hvis du skal kunne vedhæfte flere filer.
try { MailAddress adress = new MailAddress(from); MailMessage mail = new MailMessage(from, email, subject, content); SmtpClient smtp = new SmtpClient("min_smtp_adresse");
Grunden til at jeg benyttede mig af en streng var bare for at jeg først ville teste med en enkelt attachment for så derefter at udbygge til flere når det først virkede :)
Det virker nu, hvis jeg på forhånd har angivet en manuel stil.. Men hvordan får jeg det så til at spille med attachment i frontend/backend foruden commenttasken?
Her får jeg dog ikke den vedhæftede fil med og jeg tror selv det er pga. den ikke får hele stien med :/ Hvis jeg prøver at udskrive strengen URL får jeg nemlig kun navnet på den pågældende fil med endelsen :S
Jamen hvis du har en Fileuploader, så skal du tjekke i din Sendmail metode (som jo kalder sendDIRECTHTMLMail) om der er en fil til rådighed heri. Altså om brugeren har valgt at vedhæfte en fil.
Hvis ja, så skal du kalde det overload som tager stien til filen som parameter også. Hvis ikke, så skal du kalde som du har gjort indtil nu.
Noget ala:
protected void sendMail(string subject, string content) { QueryString = "SELECT * FROM DATABASEN"; dt = cmt.db_SELECT_DT(QueryString); dtr = new DataTableReader(dt);
while (dtr.Read()) { counter++; //afsender
/// Tjek om brugeren har valgt at vedhæfte en fil. if (txtAttachment.HasFile) { cmt.sendDIRECTHTMLMail(subject, content, "AFSENDER@EMAIL.DK", dtr["email"].ToString(), txtAttachment.FileName);
Men jo, du har ret i at den ikke indeholder hele stien til filen.
Derfor var det måske en ide at lave din attachment streng parameter i sendDIRECTHTMLMail metoden om til at være af typen Attachment.
Så ville du nemlig kunne gøre sådan her:
/// Tjek om brugeren har valgt at vedhæfte en fil. if (txtAttachment.HasFile) { System.Net.Mail.Attachment attactment = new System.Net.Mail.Attachment(uploader1.FileContent, null);
Compiler Error Message: CS0121: The call is ambiguous between the following methods or properties: 'System.Net.Mail.Attachment.Attachment(System.IO.Stream, string)' and 'System.Net.Mail.Attachment.Attachment(System.IO.Stream, System.Net.Mime.ContentType)'
Line 104: System.Net.Mail.Attachment attactment = new System.Net.Mail.Attachment(txtAttachment.FileContent, null);
Og da der er 2 overloads som modtager samme antal parametre og hvor disse parametre i begge tilfælde kan være null, så ved den ikke hvilket overload den skal tage.
Hvis du medsender string.Empty i stedet for null, så ved den hvilken den skal bruge.
Oh okay, my bad ;) Den havde jeg ikke lige set komme..
Det er dog lidt som om den ikke helt får attachment med, når jeg prøver at få noget indhold med... Hvis jeg fx prøver med: ------------------------------------------------- if (txtAttachment.HasFile){ System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(txtAttachment.FileContent, string.Empty); //cmt.sendDIRECTHTMLMail(subject, content, "adresse@mail.dk", dtr["email"].ToString(), Attachment); Response.Write(Attachment); } -------------------------------------------------
Så får jeg intet output..
Og hvis jeg så prøver med ------------------------------------------------- if (txtAttachment.HasFile){ System.Net.Mail.Attachment Attachment = new System.Net.Mail.Attachment(txtAttachment.FileContent, string.Empty); //cmt.sendDIRECTHTMLMail(subject, content, "adresse@mail.dk", dtr["email"].ToString(), Attachment); Response.Write(Attachment); } -------------------------------------------------
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.