webForumDet fria alternativet

Attachment via SMTP funkar på localhost men inte på server

.NET

8 svar · 3 959 visningar · startad av iSeeYou

Medlem sedan sep. 20088 inlägg
Frågan#1

Jag har en funktion i ASP.NET (C#) som skickar ett mail mha SMTP som valfritt kan innehålla en bifogad fil. Lokalt på min PC så fungerar det bra att skicka med attachment, men kör jag på servern så kommer mailet fram som det ska dock utan den bifogade filen, inget felmeddelande dyker upp. SMTP-servern kör mot port 25 (samma SMTP-server och port då min lokala maskin och servern ligger under samma nät). Servern är en Windows 2008R2.

Jag tror egentligen att det inte är koden som är felaktig eftersom det fungerar bra lokalt på min maskin (Win7/IIS) utan att det är något på servern som måste ändras men jag bifogar lite kod nedan ifall det är så att jag tror fel. :)

String strMail = lblReceiver.Text;
                String strName = txtName.Text;
                String strSubject = txtSubject.Text;
                String StoreNumber = txtStoreNumber.Text;

                String strMessage = "Mitt mailinnehåll"

                var fromAddress = new MailAddress("avsändarens@mail.se");
                var toAddress = new MailAddress(strMail, strMail);
                const string fromMailaddress = "minmailadress";
                const string fromPassword = "mittpassword";
                string subject = strSubject;
                string body = strMessage;

                var smtp = new SmtpClient
                {
                    Host = "minMailLeverantör",
                    Port = 25,
                    EnableSsl = false,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = false,
                    Credentials = new NetworkCredential(fromMailaddress, fromPassword)
                };
                using (var message = new MailMessage(fromAddress, toAddress)
                {
                    Subject = subject,
                    Body = body,
                    IsBodyHtml = true
                })
                {
                    try
                    {
                        txtFileNamePath.Text = fileAttachmentName.PostedFile.FileName;
                        if (txtFileNamePath.Text != null && File.Exists(txtFileNamePath.Text))
                        {
                            FileStream fs = new FileStream(txtFileNamePath.Text, FileMode.Open, FileAccess.Read);
                            Attachment a = new Attachment(fs, fileAttachmentName.FileName, MediaTypeNames.Application.Octet);
                            message.Attachments.Add(a);
                        }
                        smtp.Send(message);
                        message.Dispose();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        Console.ReadLine();
                    }
                }

Min slutliga fråga är mer kortfattat: Vad kan orsaken vara att det fungerar att skicka med bilagor från lokal PC (Localhost) men inte då man kör den från en server? Maskinerna ligger på samma nät, har samma brandvägg etc etc Skulle bli överlycklig om någon hade liknande erfarenhet men med ett bra svar på en lösning. :)

Medlem sedan juni 20006 022 inlägg
#2

Det borde ju finnas något i loggboken för IIS/Mailservern där man kan följa vad som händer med mailet.

Medlem sedan sep. 20088 inlägg
#3

Kollade igenom loggen men det kommer inte upp något felmeddelande eller varning om att något gått fel. Känns väldigt märkligt! Det är väl ingen speciell komponent eller roll som behöver installeras på servern för att kunna skicka med bilagor?

Medlem sedan feb. 20013 023 inlägg
#4

Kör du programmet från commandoprompten på servern?

Medlem sedan sep. 20088 inlägg
#5

Clarkbones: Ledsen men jag hänger inte med i vad du menar? Vilket program skulle jag köra i kommandoprompten menar du? Det är en webbapplikation som är utvecklad i ASP.NET (C#) och den kör jag via webbrowsern. :) Loggen kollar jag via eventvwr på windowsservern.

Medlem sedan feb. 20013 023 inlägg
#6

Ok, missade "ASP.NET". Vad händer om du tar bort felhanteringen? Nu skriver du ju ut grejer med consol.WriteLine på servern. Skriver du samma sak till event-loggen? Annars kommer ju eventuellt felmeddelande försvinna ut i tomma intet.

Medlem sedan sep. 20088 inlägg
#7

Det kommer inget fel till eventloggen heller tyvärr. En fundering som jag har är om det är så att filerna som man ska skicka med som attachment först måste laddas upp till servern och sedan plockas in därifrån som attachment. Om det kan vara så att om jag refererar till filnamnet c:\temp\filnamn.txt och den inte ligger på servern så plockar applikationen helt enkeklt inte in den? Kan det vara så enkelt? Ska testa detta!

Medlem sedan feb. 20013 023 inlägg
#8

Så enkelt är det nog...Servern har ju ingen åtkomst till ditt lokala filsystem

Medlem sedan sep. 20088 inlägg
#9

Jag löste problemet på följande sätt:
1. Formuläret med all kontaktinfo samt sökvägen till filen fylls i
2. Filen laddas upp till lokal mapp på servern (webshare/skrivbehörighet till mappen krävs för att kunna skriva till mappen)
3. All formulärdata processas och filen som laddats upp till servern läggs in som attachment.

Tack för feedback, det hjälpte till i tankeverkstaden som jag gick igenom. ;)

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)