Τελικά το έλυσα με διαφορετικό τρόπο. Έφτιαξα συνάρτηση όπου φτιάχνει ένα job στον server για να κάνει schedule την αποστολή ενός email. Με αυτόν το τρόπο μπορώ:
- Να προγραμματίσω την αποστολή όποτε θέλω και το job Μπαίνει στον server όπου μπορώ να το κάνω και ακύρωση αν θέλω.
- Στέλνω το αρχείο μου το οποίο βρίσκεται στον server και όχι τοπικά σε κάποιον χρήστη.
Το μόνο πρόβλημα που αντιμετώπισα είναι ότι αν το αρχείο ήταν μεγαλύτερο από 2-3 MB δεν έστελνε καν το email, αλλά δεν το προσπάθησα πολύ να δω τι φταίει ακριβώς.
Για την ιστορία, αυτό είναι script μου:
var
activeStartDate
= '20250826;
//Format: YYYMMDD
var
activeStartTime
= '160304'; //Format: HHmmss
var
dbName = 'ONOMA_TIS_VASIS';
var mailBody = 'Περιεχόμενο του emai, με υποστήριξη HTML';
var emailTo = 'emailApodekti';
var
mailSubject = '΄Θέμα email'
var uuid = 'monadiko string'; //Αυτό είναι για να μην υπάρξει conflict στα ονόματα των job. Ένα απλό new Date().getTime() + '_' + Math.floor(Math.random() *100000) αρκεί (το RNG είναι απλά για έξτρα σιγουριά).
var
attachment = "c\:my_file.pdf"; //Αρχείο στον server
var sqlQuery = "DECLARE @jobId BINARY(16); " +
"EXEC msdb.dbo.sp_add_job " +
"@job_name = N'" + uuid + "', " +
"@enabled = 1, " +
"@delete_level = 3; " + //Διαγράφει το job αφού εκτελεστεί
"EXEC msdb.dbo.sp_add_jobstep " +
"@job_name = N'" + uuid + "', " +
"@step_name = N'Send Email', " +
"@subsystem = N'TSQL', " +
"@command = N'EXEC msdb.dbo.sp_send_dbmail " +
"@profile_name = ''" + emailProfileName
+ "'', " +
"@recipients = ''" + emailTo + "'', " +
"@subject = ''" + mailSubject
+ "'', " +
"@body = ''" + mailBody
+ "'', " +
"@body_format = ''HTML'', " +
"@file_attachments = ''" + attachment + "''', " +
"@database_name = N'" + dbName + "', " +
"@on_success_action = 1; " +
"EXEC msdb.dbo.sp_add_jobschedule " +
"@job_name = N'" + uuid + "', " +
"@name = N'RunOnce', " +
"@freq_type = 1, " +
"@active_start_date = " + activeStartDate + ", " +
"@active_start_time = " + activeStartTime + "; " +
"EXEC msdb.dbo.sp_add_jobserver " +
"@job_name = N'" + uuid + "'"
try{ var re = X.RUNSQL(sqlQuery);
}
catch(err){}