de173 Δημοσ. 3 Σεπτεμβρίου 2009 Δημοσ. 3 Σεπτεμβρίου 2009 Καλησπέρα σε όλους και σε όλες. Προσπαθώ εδώ και καιρό να βρω κάποια διαδικασία αυτόματη να στέλνει email με συνημμένα αρχεία csv που θα τραβά από έναν φάκελο. Ο server είναι MS Exchange 2007 και σε κάθε τερματικό έχει φορτωθεί Microsoft Outlook 2007. Προσπάθησα να βρω κάτι σε VB αλλά μάταια.. Μήπως κάποιος "ζωηρός" προγραμματιστής μπορεί να βοηθήσει σε αναζήτηση λύσης του προβλήματος; Σας ευχαριστώ πολύ εκ των προτέρων!
kagelos Δημοσ. 3 Σεπτεμβρίου 2009 Δημοσ. 3 Σεπτεμβρίου 2009 Από 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
de173 Δημοσ. 3 Σεπτεμβρίου 2009 Μέλος Δημοσ. 3 Σεπτεμβρίου 2009 Υπάρχει μήπως κάτι σε script language? Η διαδικασία αυτή θα τρέχει όταν δεν θα είναι κανείς πάνω από κάποιο μηχάνημα και θα αναλαμβάνει να στείλει email.
kagelos Δημοσ. 3 Σεπτεμβρίου 2009 Δημοσ. 3 Σεπτεμβρίου 2009 Και γιατί πρέπει να είναι script? Φτιάξε ένα console application και ρύθμισε ένα Task στα Windows να τρέχουν το application.
de173 Δημοσ. 3 Σεπτεμβρίου 2009 Μέλος Δημοσ. 3 Σεπτεμβρίου 2009 Και γιατί πρέπει να είναι script? Φτιάξε ένα console application και ρύθμισε ένα Task στα Windows να τρέχουν το application. Καμία βοήθεια πάνω σε αυτό; Sorry αλλά από προγραμματισμό ξέρω λίγα...
kagelos Δημοσ. 3 Σεπτεμβρίου 2009 Δημοσ. 3 Σεπτεμβρίου 2009 Τι θες να κάνει όταν θα το τρέχεις το πρόγραμμα; Υπ' όψη μιλάμε για κονσόλα. Θα το τρέχεις και θα περνάς παράμετρο 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 που να έχει όλες τις πληροφορίες μέσα; Για πες πιο αναλυτικά τι πρέπει να κάνει και θα δούμε.
parsifal Δημοσ. 3 Σεπτεμβρίου 2009 Δημοσ. 3 Σεπτεμβρίου 2009 Ψάξε στο Google για mapisend, blat, SendEmail και Bmail. Είναι όλα CLI utilities και μπορείς να τα χρησιμοποιήσεις σε batch files ή powershell scripts, να χρησιμοποιήσεις τον task scheduler των Windows για να τα τρέχει σε τακτά χρονικά διαστήματα όπως προαναφέρθηκε κλπ.
virxen75 Δημοσ. 4 Σεπτεμβρίου 2009 Δημοσ. 4 Σεπτεμβρίου 2009 Καλησπέρα σε όλους και σε όλες.Προσπαθώ εδώ και καιρό να βρω κάποια διαδικασία αυτόματη να στέλνει email με συνημμένα αρχεία csv που θα τραβά από έναν φάκελο. Ο server είναι MS Exchange 2007 και σε κάθε τερματικό έχει φορτωθεί Microsoft Outlook 2007. Προσπάθησα να βρω κάτι σε VB αλλά μάταια.. Μήπως κάποιος "ζωηρός" προγραμματιστής μπορεί να βοηθήσει σε αναζήτηση λύσης του προβλήματος; Σας ευχαριστώ πολύ εκ των προτέρων! όταν λες vb εννοείς visual basic 6? ή .net?
de173 Δημοσ. 4 Σεπτεμβρίου 2009 Μέλος Δημοσ. 4 Σεπτεμβρίου 2009 όταν λες 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). Η γνώμη σας;
kagelos Δημοσ. 4 Σεπτεμβρίου 2009 Δημοσ. 4 Σεπτεμβρίου 2009 Αν μου πεις πως θέλεις να δουλέψει το πρόγραμμα μπορώ να σε βοηθήσω. 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 που να δέχεται αυτά τα ορίσματα;
de173 Δημοσ. 4 Σεπτεμβρίου 2009 Μέλος Δημοσ. 4 Σεπτεμβρίου 2009 Αν μου πεις πως θέλεις να δουλέψει το πρόγραμμα μπορώ να σε βοηθήσω. Αυτές τις παραμέτρους χρειάζεσαι; Δηλ. ένα πρόγραμμα console που να δέχεται αυτά τα ορίσματα; Θέλω ένα πρόγραμμα console το οποίο αφού θα παίρνει ένα csv αρχείο από έναν φάκελο, θα το στέλνει σε ένα mail address. Η διαδικασία θα γίνεται ημερήσια (θα την ορίσω από το Windows Task Manager) και το αρχείο csv έχει καθημερινά διαφορετική ονοματολογία (ανάλογα με την ημερομηνία που παράγεται-την προηγούμενη ημέρα. Δλδ. το αρχείο csv_2009-09-03 το κατεβάζω στις 4/9 και το στέλνω). Επίσης το subject του email θα αλλάζει ανάλογα και αυτό με την ημερομηνία που θα αναφέρεται το csv (στο παράδειγμά μας το subject θα μπορούσε να ήταν "CSV 3/9/2009"). Σας ευχαριστώ!
kagelos Δημοσ. 4 Σεπτεμβρίου 2009 Δημοσ. 4 Σεπτεμβρίου 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 Αν έχεις κάπου πρόβλημα ... άλλαξε τον κώδικα Υ.Γ. το subject είναι της μορφής "CSV dd/MM/yyyy" - γραμμή 26 : Dim subject As String = "CSV " + yesterday.ToString("dd/MM/yyyy") ConsoleMail.zip executable.zip
de173 Δημοσ. 4 Σεπτεμβρίου 2009 Μέλος Δημοσ. 4 Σεπτεμβρίου 2009 kagelos το πρόγραμμά σου δουλεύει αλλά για email εντός της εταιρίας (κάτω από το ίδιο domain) Προσπάθησα να το στείλω και παρα-έξω αλλά με κανένα θετικό αποτέλεσμα. Σε ευχαριστώ πολύ πάντως!
kagelos Δημοσ. 4 Σεπτεμβρίου 2009 Δημοσ. 4 Σεπτεμβρίου 2009 Τι λάθος βγάζει; Μάλλον θέλει authentication ...
de173 Δημοσ. 4 Σεπτεμβρίου 2009 Μέλος Δημοσ. 4 Σεπτεμβρίου 2009 Πώς κάνω authentication? Λογικά παράμετροι του στυλ "user" και "pass".. Και γενικότερα δεν μπορώ να δω την οθόνη για το error. Εξαφανίζεται αμέσως το παράθυρο.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.