Προς το περιεχόμενο

Batch process για αποστολή e-mail


de173

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σε όλους και σε όλες.

Προσπαθώ εδώ και καιρό να βρω κάποια διαδικασία αυτόματη να στέλνει email με συνημμένα αρχεία csv που θα τραβά από έναν φάκελο.

 

Ο server είναι MS Exchange 2007 και σε κάθε τερματικό έχει φορτωθεί Microsoft Outlook 2007.

Προσπάθησα να βρω κάτι σε VB αλλά μάταια..

 

Μήπως κάποιος "ζωηρός" προγραμματιστής μπορεί να βοηθήσει σε αναζήτηση λύσης του προβλήματος;

 

Σας ευχαριστώ πολύ εκ των προτέρων!

Δημοσ.

Από C# μπορείς να στείλεις email έτσι:

>System.Net.Mail.[color="#2b91af"]SmtpClient[/color] smtpc = [color="#0000ff"][b]new[/b][/color] System.Net.Mail.[color="#2b91af"]SmtpClient[/color](txtMailServer.Text);
System.Net.Mail.[color="#2b91af"]MailMessage[/color] msg = [color="#0000ff"][b]new[/b][/color] System.Net.Mail.[color="#2b91af"]MailMessage[/color]([color="#0000ff"][b]new[/b][/color] System.Net.Mail.[color="#2b91af"]MailAddress[/color](txtSenderEmail.Text), [color="#0000ff"][b]new[/b][/color] System.Net.Mail.[color="#2b91af"]MailAddress[/color](txtRecipientEmail.Text));
msg.IsBodyHtml = [color="#0000ff"][b]true[/b][/color];
msg.BodyEncoding = System.Text.[color="#2b91af"]Encoding[/color].UTF8;
msg.Subject = [color="#a31515"]"Blah blah"[/color];
msg.Body = txtMessage.Text;
smtpc.Send(msg);




 

Έχει και properties για Attachments

Δημοσ.

Υπάρχει μήπως κάτι σε script language? Η διαδικασία αυτή θα τρέχει όταν δεν θα είναι κανείς πάνω από κάποιο μηχάνημα και θα αναλαμβάνει να στείλει email.

Δημοσ.
Και γιατί πρέπει να είναι script? Φτιάξε ένα console application και ρύθμισε ένα Task στα Windows να τρέχουν το application.

 

Καμία βοήθεια πάνω σε αυτό;

 

Sorry αλλά από προγραμματισμό ξέρω λίγα...

Δημοσ.

Τι θες να κάνει όταν θα το τρέχεις το πρόγραμμα; Υπ' όψη μιλάμε για κονσόλα.

 

Θα το τρέχεις και θα περνάς παράμετρο

1) mail server address

2) sender email address

3) recipient email address

4) Email subject

5) Email body

6) ???

 

Τα 5 πρώτα είναι standard.

Τι άλλο θα πρέπει να δέχεται για παράμετρο? Το path ενός αρχείου που θα πρέπει να στείλει ως attachment? Επιπλέον το subject και το body ίσως να πρέπει να τα διαβάζει από text αρχείο αντί να τα περνάς παράμετρο; Ή να διαβάζει από μια λίστα τους recipients? Ή ένα xml που να έχει όλες τις πληροφορίες μέσα;

Για πες πιο αναλυτικά τι πρέπει να κάνει και θα δούμε.

Δημοσ.

Ψάξε στο Google για mapisend, blat, SendEmail και Bmail.

 

Είναι όλα CLI utilities και μπορείς να τα χρησιμοποιήσεις σε batch files ή powershell scripts, να χρησιμοποιήσεις τον task scheduler των Windows για να τα τρέχει σε τακτά χρονικά διαστήματα όπως προαναφέρθηκε κλπ.

Δημοσ.
Καλησπέρα σε όλους και σε όλες.

Προσπαθώ εδώ και καιρό να βρω κάποια διαδικασία αυτόματη να στέλνει email με συνημμένα αρχεία csv που θα τραβά από έναν φάκελο.

 

Ο server είναι MS Exchange 2007 και σε κάθε τερματικό έχει φορτωθεί Microsoft Outlook 2007.

Προσπάθησα να βρω κάτι σε VB αλλά μάταια..

 

Μήπως κάποιος "ζωηρός" προγραμματιστής μπορεί να βοηθήσει σε αναζήτηση λύσης του προβλήματος;

 

Σας ευχαριστώ πολύ εκ των προτέρων!

 

όταν λες vb εννοείς visual basic 6? ή .net?

Δημοσ.
όταν λες vb εννοείς visual basic 6? ή .net?

 

Σε VB 2008 (θεωρείται .net αυτή;..)

 

Έψαξα λίγο στο νετ και βρήκα πρόγραμμα κονσόλας.

 

>Imports System.IO
Imports System.Net

Module Http2Email

   Sub Main()
       Dim myWebRequest As WebRequest
       Dim myStreamReader As StreamReader
       Dim strSubject, strBody As String
       Dim myMailMessage As Mail.MailMessage
       Dim mySmtpClient As Mail.SmtpClient

       ' Retrieve HTML via HTTP request to use as body of email
       myWebRequest = WebRequest.Create(My.Settings.Url)
       myStreamReader = New StreamReader(myWebRequest.GetResponse().GetResponseStream())
       strBody = myStreamReader.ReadToEnd
       myStreamReader.Close()

       ' Get subject from settings and replace placeholder with current date
       strSubject = My.Settings.EmailSubject
       strSubject = strSubject.Replace("<date>", FormatDateTime(Now(), DateFormat.ShortDate))

       ' Create email message
       myMailMessage = New Mail.MailMessage(My.Settings.EmailFrom, My.Settings.EmailTo, strSubject, strBody)
       If My.Settings.EmailCC <> "" Then myMailMessage.CC.Add(My.Settings.EmailCC)
       If My.Settings.EmailBCC <> "" Then myMailMessage.Bcc.Add(My.Settings.EmailBCC)
       myMailMessage.IsBodyHtml = My.Settings.EmailHtml

       ' Send email
       mySmtpClient = New Mail.SmtpClient()
       mySmtpClient.Host = My.Settings.SmtpServer
       mySmtpClient.Send(myMailMessage)
   End Sub

End Module

 

Οι παράμετροι που έπρεπε να δημιουργήσω κατά την άποψη του προγραμματιστή ήταν:

 

Url - URL from which we pull the HTML to use as the body of the email

EmailFrom - From email address(es)

EmailTo - To email address(es)

EmailCC - CC email address(es)

EmailBCC - BCC email address(es)

EmailSubject - Subject line for the email message

EmailHtml - Boolean indicating if the email should be formatted as HTML or not

SmtpServer - Name of the SMTP server to use to send the email message

 

Το πρόγραμμα όμως σταμάτησε να λειτουργεί στην εντολή

mySmtpClient.Send(myMailMessage)

με μήνυμα λάθους "Mailbox unavailable. The server response was: 5.7.1 Unable to relay."

 

Φαντάστηκα λοιπόν ότι θα πρέπει να κάνω ένα είδους authentication πριν προσπαθήσω να στείλω το mail. Πρέπει να δημιουργήσω παράμετρω για αυτό το πράγμα; Και αν δημιουργήσω παράμετρω, πώς θα την προσθέσω στο πρόγραμμα;

 

Θα δω και τα προγράμματα που ανέφερε ο parsifal αν και το blat από μία πρώτη δοκιμή, δεν με ικανοποίησε.

 

Σας ευχαριστώ!

 

Και το bmail το ίδιο error έβγαλε. Το exchange τρέχει σε windows 2003. Θεωρώ ότι το πρόβλημα δεν είναι στον exchange αλλά στα windows (server).

Η γνώμη σας;

Δημοσ.

Αν μου πεις πως θέλεις να δουλέψει το πρόγραμμα μπορώ να σε βοηθήσω.

Url - URL from which we pull the HTML to use as the body of the email

EmailFrom - From email address(es)

EmailTo - To email address(es)

EmailCC - CC email address(es)

EmailBCC - BCC email address(es)

EmailSubject - Subject line for the email message

EmailHtml - Boolean indicating if the email should be formatted as HTML or not

SmtpServer - Name of the SMTP server to use to send the email message

 

Αυτές τις παραμέτρους χρειάζεσαι; Δηλ. ένα πρόγραμμα console που να δέχεται αυτά τα ορίσματα;

Δημοσ.
Αν μου πεις πως θέλεις να δουλέψει το πρόγραμμα μπορώ να σε βοηθήσω.

 

 

Αυτές τις παραμέτρους χρειάζεσαι; Δηλ. ένα πρόγραμμα console που να δέχεται αυτά τα ορίσματα;

 

Θέλω ένα πρόγραμμα console το οποίο αφού θα παίρνει ένα csv αρχείο από έναν φάκελο, θα το στέλνει σε ένα mail address.

Η διαδικασία θα γίνεται ημερήσια (θα την ορίσω από το Windows Task Manager) και το αρχείο csv έχει καθημερινά διαφορετική ονοματολογία (ανάλογα με την ημερομηνία που παράγεται-την προηγούμενη ημέρα. Δλδ. το αρχείο csv_2009-09-03 το κατεβάζω στις 4/9 και το στέλνω).

Επίσης το subject του email θα αλλάζει ανάλογα και αυτό με την ημερομηνία που θα αναφέρεται το csv (στο παράδειγμά μας το subject θα μπορούσε να ήταν "CSV 3/9/2009").

 

Σας ευχαριστώ!

Δημοσ.

Κοίτα τα επισυναπτόμενα.

Το πρόγραμμα λειτουργεί ως εξής :

Υπάρχει το .exe και το app.config

Το app.config έχει κάποιες παραμέτρους (ώστε να μην χρειάζεται να τις περνάς στην κονσόλα). Το ανοίγεις με Visual Studio (ή Notepad) και αλλάζεις αυτά που χρειάζεσαι. Οι παράμετροι που βρίσκονται εκεί μέσα είναι οι εξής :

 

<appSettings>

<add key="mailServer" value="mailgate.otenet.gr"/>

<add key="mailFrom" value="[email protected]"/>

<add key="csvDirectory" value="c:\csv"/>

<add key="recipients_list" value="c:\recipients.txt"/>

</appSettings>

 

Η διεύθυνση του mail server

Το e-mail του αποστολέα

Ο φάκελος που βρίσκεται το csv

Ένα αρχείο text με τα email των παραληπτών

 

Το πρόγραμμα ψάχνει μέσα στον φάκελο που δώσαμε για τα csv για να βρει ένα αρχείο της μορφής : csv_yyyy-MM-dd.csv με χθεσινή ημερομηνία

π.χ. csv_2009-09-03 πρόσεξε τα μηδενικά (09 και όχι 9)

 

Αυτό γίνεται στην γραμμή 24-25 :

 

>[color="#0000ff"][b]Dim[/b][/color] yesterday [color="#0000ff"][b]As[/b][/color] [color="#2b91af"]DateTime[/color] = [color="#2b91af"]DateTime[/color].Now.AddDays(-[color="#ff8000"]1[/color])
[color="#0000ff"][b]Dim[/b][/color] [color="#2b91af"]attachment[/color] [color="#0000ff"][b]As[/b][/color] [color="#8000ff"]String[/color] = csvDirectory + [color="#a31515"]"csv_"[/color] + yesterday.ToString([color="#a31515"]"yyyy-MM-dd"[/color]) + [color="#a31515"]".csv"[/color]

 

Μετά το πρόγραμμα ανοίγει το αρχείο που του δώσαμε για τους παραλήπτες. Θα πρέπει κάθε γραμμή του αρχείου να περιέχει μια μόνο διεύθυνση email.

Έτσι δηλαδή :

 

[email protected]

[email protected]

[email protected]

 

Τα λάθη εμφανίζονται στην κονσόλα και γράφονται και στο Event Log

Αν έχεις κάπου πρόβλημα ... άλλαξε τον κώδικα :P

 

Υ.Γ. το subject είναι της μορφής "CSV dd/MM/yyyy" - γραμμή 26 :

 

Dim subject As String = "CSV " + yesterday.ToString("dd/MM/yyyy")

ConsoleMail.zip

executable.zip

Δημοσ.

kagelos το πρόγραμμά σου δουλεύει αλλά για email εντός της εταιρίας (κάτω από το ίδιο domain)

 

Προσπάθησα να το στείλω και παρα-έξω αλλά με κανένα θετικό αποτέλεσμα.

 

Σε ευχαριστώ πολύ πάντως!

Δημοσ.

Πώς κάνω authentication?

Λογικά παράμετροι του στυλ "user" και "pass"..

 

Και γενικότερα δεν μπορώ να δω την οθόνη για το error. Εξαφανίζεται αμέσως το παράθυρο.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...