Проблемы с программой электронной почты - PullRequest
0 голосов
/ 30 декабря 2018

Я работаю в компании, и меня попросили написать какой-нибудь сценарий, который сделал бы робокопию пункта назначения, а затем отправил по электронной почте журнал с темой, которая была либо неудачной, либо успешной.После долгих исследований я не мог понять, почему моя программа продолжает ломаться, и она тоже ломается странным образом.

Сценарий состоит из пакетного сценария и приложения ac # для отправки электронного письма.

RobocopyScript.cmd

@echo off


set robocopydestination=\\[computer]\guest\TESTFOLDER\
set robocopysource=C:\Users\[username]\Script
set robocopylogoutput=log.log


set mailfrom=[email address]
set mailto=[email address]
set successsubject=Robocopy Success
set successbody=Robocopy successfully completed its backup.
set failuresubject=Robocopy Failure
set failurebody=Robocopy failed to complete its backup
set networkcredentialusername=[email address]
set networkcredentialpassword=[password]
set logfile=log.log

robocopy %robocopysource% %robocopydestination% /e /z /tee /log:%robocopylogoutput%
if errorlevel 1 goto success
if errorlevel 0 goto success
goto fail

:fail
EmailProgram.exe %mailfrom% %mailto% %failuresubject% %failurebody% %networkcredentialusername% %networkcredentialpassword% %logfile%
exit

:success
EmailProgram.exe %mailfrom% %mailto% %successsubject% %successbody% %networkcredentialusername% %networkcredentialpassword% %logfile%
exit

EmailProgram.csx

using System;
using System.Net.Mail;

namespace EmailProgram
{
    class MainClass
    {
        public static void Main(string[] args)
        {                                   // from     To       Subject  Body
            MailMessage mail = new MailMessage(args[0], args[1], args[2], args[3]);
            SmtpClient client = new SmtpClient();

            //set up the smtp client
            client.Port = 25;
            client.EnableSsl = true;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Host = "smtp.gmail.com";                     //ncu      ncp
            client.Credentials = new System.Net.NetworkCredential(args[4], args[5]);

            //add 4 lines of space between the body message and the log information for readability
            mail.Body += "\r\n\r\n\r\n\r\n----------------\r\nLOG START:\r\n----------------";

            //break up the log file into its lines, then write the lines to the email message body
                                                          //log file path
            string[] logLines = System.IO.File.ReadAllLines(args[6]);
            foreach(string s in logLines)
            {
                mail.Body += s;
            }

            //send the email, if the email fails to send it simply will close this application
            try
            {
                client.Send(mail);
            }
            catch(Exception e)
            {
                System.Console.WriteLine(e);
            }
        }
    }
}

При запуске пакетного сценария robocopy успешно завершается, затем при попытке запустить EmailProgram.exe выдает:

Необработанное исключение: System.IO.FileNotFoundException: Не удалось найти файл 'C: \ Users \[имя пользователя] \ Script \ CompleteProjects \ RobocopyEmail \ complete '.

Я определенно не эксперт, но я не вижу в своем коде нигде такого кода, который бы указывал путь, который дает исключение.Может кто-нибудь, пожалуйста, помогите мне понять это, потому что я озадачен после нескольких часов попыток выяснить это.Спасибо:)

1 Ответ

0 голосов
/ 30 декабря 2018

В переменных successsubject и т. Д. Есть пробелы

Когда вы звоните EmailProgram.exe %mailfrom% %mailto% %successsubject% %successbody% ..., вы действительно отправляете вызов

EmailProgram.exe apa@bepa.com qux@foo.bar Robocopy Success Robocopy successfully completed its backup...

Так что completed становится args[6] вадрес электронной почты.

Попробуйте вместо этого

EmailProgram.exe "% mailfrom%" "% mailto%" "% successsubject%" "% successbody%" ...

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...