Patch level : 12.00 1368

Files correlati     : xvaga.dll xwsmtp.dll ba0100m.msk sc0.exe sc2100b.msk sc2400b.msk

Commento:
Invio estratti conti e solleciti via mail
This commit is contained in:
Alessandro Bonazzi 2024-11-06 14:04:59 +01:00
parent d63fe98078
commit aa2296775c
2 changed files with 75 additions and 10 deletions

View File

@ -583,11 +583,14 @@ XVTDLL BOOLEAN xvt_url_get(const char * url, const char * path, const
XVTDLL void xvt_set_mail_params(const char * smtp, const char * port, const char * user, const char * pass, const char * from);
// Send email using normal methods
XVTDLL BOOLEAN xvt_mail_send(const char* to, const char* cc, const char* ccn,
const char* subject, const char* msg, const char* attach, short flags); // 0x1=UI; 0x2=Receipt
// flags 0x1=UI; 0x2=Receipt
XVTDLL BOOLEAN xvt_mail_send(const char* to, const char* cc, const char* ccn, const char* subject,
const char* msg, const char* attach, short flags);
// Send email using Microsoft Powershell
XVTDLL BOOLEAN xvt_powermail_send(const char* to, const char* cc, const char* ccn,
const char* subject, const char* msg, const char* attach, short flags, const char* usr); // 0x1=UI; 0x2=Receipt
XVTDLL BOOLEAN xvt_wx_mail_send(const char* to, const char* cc, const char* ccn, const char* subject,
const char* msg, const char* attach, short flags);
XVTDLL short xvt_mail_installed();
XVTDLL void xvt_btn_set_images(WINDOW win, XVT_IMAGE up, XVT_IMAGE down);

View File

@ -7,6 +7,8 @@
#include <wx/filename.h>
#include <wx/mimetype.h>
#include <wx/textfile.h>
#include <email.h>
#include <smtp.h>
#include <fstream>
static wxString GetMailParam(const char* key, const char* def = "")
@ -69,7 +71,7 @@ void xvt_set_mail_params(const char * smtp, const char * port, const char * user
if (user && *user)
__user = _strdup(user);
if (pass && *pass)
__pass = _strdup(from);
__pass = _strdup(pass);
}
static bool GetMailParams(wxString& smtp, wxString& port, wxString& user, wxString& pass, wxString& from)
@ -425,7 +427,7 @@ BOOLEAN xvt_powermail_send(const char* to, const char* cc, const char* ccn,
// Controllo che Windows sia almeno 8 e che riesca a ricevere i parametri E-mail
if(xvt_sys_get_os_version() < XVT_WS_WIN_7 || !GetMailParams(server, port, user, password, from))
xvt_mail_send(to, cc, ccn, subject, msg, attach, flags);
xvt_mail_send(to, cc, ccn, subject, msg, attach, flags);
wxString str_to(to);
@ -503,7 +505,7 @@ BOOLEAN xvt_powermail_send(const char* to, const char* cc, const char* ccn,
file.Write("$CC = "); file.Write(str_cc); file.Write("\n");
}
if (has_ccnsend())
if (hasccn || has_ccnsend())
{
wxString str_ccn(from);
buildPSArray(str_ccn);
@ -517,7 +519,7 @@ BOOLEAN xvt_powermail_send(const char* to, const char* cc, const char* ccn,
//TODO same per from e to
//mettere un flag nella mask per decidere se mettere in CC o in CCn
if (hascc == true)
/*if (hascc == true)
{
file.Write(
"foreach($i in $CC)\n"
@ -531,7 +533,7 @@ BOOLEAN xvt_powermail_send(const char* to, const char* cc, const char* ccn,
"foreach($i in $Bcc)\n"
"{ $message.Bcc.Add($i)}\n"
);
}
} */
file.Write(
@ -571,18 +573,21 @@ BOOLEAN xvt_powermail_send(const char* to, const char* cc, const char* ccn,
"catch\n"
"{\n"
" write-host \"E-Mail not sent\" ; \n"
" $exitCode = 1 \n"
" exit $exitCode \n"
" write-host $_.Exception.Message ;\n"
" $exitCode = 1 \n"
" exit $exitCode \n"
"}\n"
);
file.Close();
wxString command("powershell.exe -File ");
wxString command("powershell.exe -File ");
//una volta scritto lo scritp ps1 cos'è che lo runna? Dove vinene aperta la PowerShell?
// al momento lo script generato da campo funziona se runnato direttamente da powershell
command << powerFile;
FILE *f;
fopen_s(&f, "maillog.log", "w");
fprintf(f, "Comando %s\n", (const char*)command);
int exit = xvt_sys_execute(command, true, true);
@ -590,3 +595,60 @@ BOOLEAN xvt_powermail_send(const char* to, const char* cc, const char* ccn,
fclose(f);
return exit == 0;
}
BOOLEAN xvt_wx_mail_send(const char* to, const char* cc, const char* ccn,
const char* subject, const char* msg,
const char* attach, short flags)
{
wxString server, port, user, password, from;
GetMailParams(server, port, user, password, from);
bool ui = (flags & 0x1) != 0;
wxSMTP * Smtp = new wxSMTP(nullptr);
wxString str_to(to);
bool ok = true;
if (ui)
{
wxEmailDlg dlg;
dlg._strEmail = str_to;
if (dlg.ShowModal() == wxID_OK)
str_to = dlg._strEmail;
}
wxStringTokenizer tokTo(str_to, _T(";"));
wxEmailMessage * Msg = new wxEmailMessage(subject, msg, from);
// da trovare Msg->m_query_receipt = flags & 0x2;
while (tokTo.HasMoreTokens())
Msg->AddTo(tokTo.GetNextToken());
if (attach && *attach)
{
wxStringTokenizer tokAttach(attach, _T(";"));
while (tokAttach.HasMoreTokens())
Msg->AddFile(tokAttach.GetNextToken());
}
if (cc && *cc)
{
wxStringTokenizer Tok(cc, _T(";"));
while (Tok.HasMoreTokens())
Msg->AddCc(Tok.GetNextToken());
}
if (ccn && *ccn)
{
wxStringTokenizer Tok(ccn, _T(";"));
while (Tok.HasMoreTokens())
Msg->AddBcc(Tok.GetNextToken());
}
int service = atoi(port);
if (service == 0)
service = 25;
Smtp->SetHost(server, service, from, password);
Smtp->Send(Msg);
Smtp->SendData();
delete Msg;
delete Smtp;
return ok;
}