Ενεργοποίηση ταυτοποίησης SMTP με CDOSYS (Σύστημα.Web.Mail)
Ένα από τα πιο κοινά προβλήματα με τη χρήση CDOSYS (η οποία είναι η υποκείμενη κατηγορία που χρησιμοποιείται από Σύστημα. Web.Mail) είναι η έλλειψη ταυτοποίησης για την αποστολή αλληλογραφίας μέσω SMTP, Darren Jefford δημοσίευσε μια μέθοδο Για να το κάνω αυτό, το αναδημοσιεύω παρακάτω από τότε που φιλοξενείται στο GotDotNwet και έτσι μπορεί να εξαφανιστεί κάποια στιγμή:
Σύστημα. Web.Mail and Authentication
Μια ερώτηση ήρθε πρόσφατα για το πώς να στείλετε email από .NET, σύστημα.Web.Mail προσφέρει μια ωραία MailMessage και SmtpMail τάξη που κάνει το κόλπο.
Τα μαθήματα είναι ένα περιτύλιγμα πάνω από το CDOSYSλειτουργικότητα που είναι τριγύρω για λίγο, και είναι πολύ καλύτερη από ό, τι η μάλλον clunky διεπαφή CDOSYS:)
Είναι πραγματικά ευθεία προς τα εμπρός για να στείλετε ένα μήνυμα:
Σύστημα.Web.Mail.MailMessage msg = νέο σύστημα.Web.Mail.Message(), msg.Υποκείμενο = "Δοκιμή";msg.Body = "Hello World";msg.From = "[email protected] ";msg.to = " [email protected] ";
Σύστημα.Web.Mail.SmtpMail.SmtpServer = "YOUREXCHANGESERVER"·System.Web.Mail.SmtpMail.Send( msg ) ·
Ωστόσο, όταν το δοκίμαζα ενάντια σε έναν εξυπηρετητή Exchange αρνήθηκε να στείλει, επιστρέφοντας αυτό το σφάλμα:
Σύστημα.Runtime.InteropServices.COMΕκτός από (0x8004020E): Ο διακομιστής απέρριψε τη διεύθυνση αποστολέα. Η απάντηση του διακομιστή ήταν: 454 5.7.3 Πελάτης δεν έχει άδεια να υποβάλει mail σε αυτόν τον διακομιστή.
Από προεπιλογή (και σοφά) Exchange δεν επιτρέπει στους μη αυθεντικούς χρήστες να στείλουν mail μέσω SMTP για την πρόληψη ενάντια spammers, κλπ. Για να κόψετε μια πολύ μεγάλη ιστορία πυροβόλησε την κατηγορία SmtpMail δεν χειρίζεται την επαλήθευση στον εξυπηρετητή Exchange που σημαίνει ότι δεν μπορείτε να χρησιμοποιήσετε την τάξη σε πιο ασφαλή σενάρια.
Μετά από πολύ σκάψιμο βρήκα ότι CDOSYS Μήπωςέχουν κωδικό ταυτότητας όπως θα περιμένατε, ωστόσο η MailMessage ή SmtpMail τάξη δεν εκθέτει κανένα τρόπο για να το ενεργοποιήσετε. Μετά από λίγο περισσότερο σκάψιμο βρήκα ότι η ομάδα Everett (.NET Πλαίσιο 1.1) το συνειδητοποίησε αυτό και πρόσθεσε ένα νέο ακίνητο που ονομάζεται Fields, το οποίο όπως μπορείτε βλ.λείπει κάποια τεκμηρίωση ;-)
Έτσι, μετά από κάποια περαιτέρω έρευνα έχω διαπιστώσει ότι μπορείτε να πιστοποιήσετε εναντίον ενός διακομιστή, αν έχετε έκδοση 1.1 του πλαισίου, και αυτή είναι η γραμμή που πρέπει να προσθέσετε στον παραπάνω κώδικα:
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate,"
Όταν το 2 προσδιορίζει NTLM, 1 για τα βασικά, 0 για κανένα (η προεπιλογή)
Μπορείτε φυσικά να ρυθμίσετε το μυριάδαάλλων επιλογών ρύθμισης μέσω αυτής της συλλογής πεδίων
Αισθάνομαι ένα άρθρο MSDN HOWTO που έρχεται, και ίσως πολιτικά ζητώντας κάποια τεκμηρίωση MSDN για να ανεβάσετε!:-)