[ASP.Net Core WebApp]chyba na serveru při odesílání emailu

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod dyžon 16. 5. 2020 12:21

zdravím,
na formu mám povinnej input EMAIL a textareu POPIS
pomocí ajaxu posílám do Controlleru
Kód: Vybrat vše
var divEmailElement = $('#modalniOknoEmailu');
$("#divLoader").show();
        $.post(actionUrl, dataToSend).done(function (data) {
            $("#divLoader").hide();
            if (data.odeslo != null) {
                if (data.odeslo) {
                    divEmailElement.find('.modal-title').html("email odeslán");
                    divEmailElement.find('.modal-body').html(data.obsahSuccess);
                }
                else {
                    divEmailElement.find('.modal-title').html("chyba odeslání");
                    divEmailElement.find('.modal-body').html(data.obsahError);
                }
            }
            else {
                var newBody = $('.modal-body', data);
                divEmailElement.find('.modal-body').replaceWith(newBody);
            };
        });

controller:
Kód: Vybrat vše
     [HttpGet]
      public ActionResult PosliEmail(string modelUrl)
      {
         var model = new Email { };
         model.Predmet = modelUrl;
         return PartialView("_emailModalPartial", model);
      }

      [HttpPost]
      [ValidateAntiForgeryToken]
      public IActionResult PosliEmail(Email email)
      {
         if (ModelState.IsValid)
         {
            try
            {
               var contentRoot = _env.ContentRootPath;
               string poOdeslani = string.Empty;
               if(OdesliEmail(email.Predmet, email.EmailOdesilatele, email.Obsah)) {
                  using (StreamReader reader = new StreamReader(contentRoot + "\\Views\\Karta\\_emailSuccess.cshtml"))
                     {
                     poOdeslani = reader.ReadToEnd();
                     }
                  return Json(new { odeslo = true, obsahSuccess = poOdeslani });
               }
               else
               {
                  using (StreamReader reader = new StreamReader(contentRoot + "\\Views\\Karta\\_emailError.cshtml"))
                  {
                     poOdeslani = reader.ReadToEnd();
                  }
                  return Json(new { odeslo = false, obsahError = poOdeslani });
               }
            }
            catch (Exception ex)
            {
               return Json(new { odeslo = false, errorMessage = ex });
            }
         }
         else
         {
            return PartialView("_EmailModalPartial", email);
         }   
      }

a funkce odeslání emailu:
Kód: Vybrat vše
public bool OdesliEmail(string predmet, string emailOdesilatele, string obsah)
      {
         try
         {
            MimeMessage message = new MimeMessage();
            MailboxAddress from = new MailboxAddress(emailOdesilatele, emailOdesilatele);

            message.From.Add(from);

            MailboxAddress toDyzon = new MailboxAddress("dyzon", "dyzon@email.cz");
            message.To.Add(toDyzon);

            message.Subject = predmet;

            var contentRoot = _env.ContentRootPath;
            string telo = string.Empty;
            using (StreamReader reader = new StreamReader(contentRoot + "\\Models\\TeloEmailu.cshtml"))
            {
               telo = reader.ReadToEnd();
            }
            telo = telo.Replace("{odesilatel}", emailOdesilatele);
            telo = telo.Replace("{predmet}", predmet);
            telo = telo.Replace("{obsah}", obsah);

            BodyBuilder bodyBuilder = new BodyBuilder();
            bodyBuilder.HtmlBody = telo;

            message.Body = bodyBuilder.ToMessageBody();
            string user = configuration.GetSection("EmailData").GetSection("EmailUser").Value;
            string pass = configuration.GetSection("EmailData").GetSection("EmailPass").Value;

            SmtpClient client = new SmtpClient();
            client.Connect("email.active24.com", 465, true);
            client.Authenticate(user, pass);

            client.Send(message);
            client.Disconnect(true);
            client.Dispose();

            return true;
         }
         catch (Exception)
         {
            return false;
         }
      }

no a problém je, že z localu se email odešle v pohodě, ale když to nahraju na server, tak mi to háže chybu:
POST https://mojedomena.cz/Karta/PosliEmail 500 (Internal Server Error)
prosím nevíte někdo co je špatně ??
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 16. 5. 2020 17:21

Nebude problém ve struktuře databáze? Že by nesouhlasil model - jinak error logy pro bližší info - 500 je problém někde uvnitř aplikace
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 17. 5. 2020 10:52

dík za reakci,
k databázi se tady vůbec nepřipojuji,
problém je někde v controlleru v akci PosliEmail.
model email je v pořádku, validace modelu taky proběhne.
protože se ta chyba objeví jen na web serveru, musím to pokaždé publikovat .. hrůza.
ve firefoxu akce neproběhne, ale žádná chyba se v console nevypíše.
vypadá to, že problém bude v:
Kód: Vybrat vše
using (StreamReader reader = new StreamReader(contentRoot + "\\Views\\Karta\\_emailSuccess.cshtml"))
               {
                  poOdeslani = reader.ReadToEnd();
               }

ale zatím to nevím jistě, pokud to tím bude, zkusím to obejít.
v těch partialViewech je jen pár řádků html o tom, jak dopadlo odeslání.

v chrome se mi podrobnosti o chybě nezobrazují, musím nastavit nějakej Enviroment a to nevím jak ani po několika příkladech z netu. moc nechápu, k čemu to je, podle mě to má význam jen na localu.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 17. 5. 2020 11:18

To nemáš k dispozici error log od serveru?

Nevím jestli je nutné mít 2x lomítka
Toto to nevyřeší?
https://stackoverflow.com/a/44196860
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 17. 5. 2020 18:29

dělám to v core 3.1
IWebHostEnvironment mi vrací cestu s \\ ,

používám ho když ukládám obrázky a ty se ukládají v pohodě.

Kód: Vybrat vše
var saveimg = Path.Combine(_env.WebRootPath, "images", source.FileName);
string imgext = Path.GetExtension(source.FileName);
if (imgext == ".jpg" || imgext == ".png")
{
   using var uploading = new FileStream(saveimg, FileMode.Create);
   await source.CopyToAsync(uploading);
}

kde najdu error log od serveru?
na serveru ho k dispozici nemám, nebo aspoň jsem ho nenašel ... hostuju u Active24
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 17. 5. 2020 19:10

Pokud používáš takový zápis, tak ho použij stejně i u toho StreamReaderu

Podle active24 by měly být logy na FTP ve složce LOGS
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 18. 5. 2020 11:05

tak to jsem samozřejmě udělal, ale taky chyba 500.
nechal jsem si vypsat cestu k souborům, co je načítám přes StreamReader a cesty jsou správné.

problém je při volání StreamReader.
na log z dnešního dne se podívat nemůžu,
když se ho pokusim v totalcmdr otevřít, píše že při stahování došlo k chybě, ... nic k tomu, takže nevím proč,
ale ze včerejška je to:
2020-05-17 16:11:52 MOJEIP POST /Karta/PosliEmail - 443 - IPDOMENY Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/81.0.4044.138+Safari/537.36 https://MOJEDOMENA.cz/ 500 0 0 6965 1067 234

moc chytrej z toho teda nejsem ...
chyba je 500, ale jak zjistím, co znamenají ty ostatní čísla ??
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 18. 5. 2020 13:59

nakonec jsem zjistil, jak nastavit
Kód: Vybrat vše
<EnvironmentName>Development</EnvironmentName>

v PublishProfiles a povolil výpis chyb ze serveru
při publikování se na ftp se vytváří jen složka wwwroot, takže všechny načítaný externí soubory musí být v ní.
taková blbost a tolik zbytečnýho úsilí, hledal jsem ze špatné strany.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 19. 5. 2020 18:37

UPDATE
soubory nemusí být přímo v wwwroot, ale v core se musí publikovat ručně.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 19. 5. 2020 19:43

Gratulace - takováto informace již zůstane v paměti nadosmrti.
Každopádně cením snahu - sám v asp.net ještě nedělám - měl jsem nastartováno pro jednu firmu, ale vzhledem k akutní potřebě mé osoby v aktuálním zaměstnání jsem od toho upustil.

Programuji především v php, Delphi, Grails a Android JAVA
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 24. 5. 2020 07:40

děkuji,
to jo, tohle se bude vykuřovat dlouho .. :-D ;-)
Asp.net je výborný, jedna z hlavních výhod je, že VS je zdarma ...
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků