2009-07-03 13 views
9

Ich muss wissen, was die beste Vorgehensweise für das Senden von E-Mails von meinen Sharepoint-Webparts und/oder benutzerdefinierten Features ist.Senden von E-Mails in Sharepoint

Sollte ich nur die normalen. Net-Klassen verwenden, um E-Mails zu senden? oder ist es eine bessere Möglichkeit, dies durch die Integration mit einem Outlook-Server zu tun?

Antwort

16

einfache Art und Weise ist die eingebaut Dienstprogramme zu verwenden, dies wird dann den Setup-setttings Mail-Server verwenden, in zentraler Admin

using Microsoft.SharePoint.Utilities; 
SPUtility.SendEmail(SPContext.Current.Web, false, false, 
    "[email protected]", "subject", 
    "body"); 
+1

Dies verwendet die Adresse von in CA Server-Betreiber angegeben. Wenn Sie benutzerdefinierte Adressen verwenden möchten, verwenden Sie normale .net-Klassen. – ArjanP

1

Universal-Weg E-Mail in jedem Kontext zu schicken (wo SPWeb nicht verfügbar) OutboundMailService gelesen Einstellungen, die in SPUtility verwendet wird. Dann erstellen Sie SmtpClient manuell:

var adminApp = SPAdministrationWebApplication.Local; 
var instance = adminApp.OutboundMailServiceInstance; 

var server = instance.Server.Address; 
var defaultFrom = adminApp.OutboundMailSenderAddress; 

var client = new SmtpClient(); 
client.Host = server; 
message.From = new MailAddress(defaultFrom); 
... 
0

Sie können diesen Code auch für dynamische Mail-ID verwenden. Dieser Code erhält die Mail entsprechend dem Benutzer. Ich habe eine CAML-Abfrage verwendet, um die Daten für den E-Mail-Inhalt aus den Listen abzurufen.

SPUser AssigUser = oWeb.EnsureUser(Assigned_Username); 
SPQuery mquery = new SPQuery(); 
mquery.Query = @"<Where><Eq><FieldRef Name='Email_x0020_Type' /> 
        <Value Type='Text'>Review - Ready for Review</Value> 
       </Eq></Where>"; 
string Emailsub = ""; 
string Emailbody = ""; 
SPList mList = oWeb.Lists["Email Content"]; 
SPListItemCollection itemcollection = mList.GetItems(mquery); 
foreach (SPListItem item in itemcollection) 
{ 
    Emailsub = item["Email Subject"].ToString(); 
    Emailbody = item["Email Content"].ToString(); 
    SPUtility.SendEmail(oWeb, false, false, AssigUser.Email, Emailsub, 
         Emailbody + "</br>" + oWeb.Url); 
    break; 
} 
+0

Können Sie erklären, wann dieser Code nützlich ist? Es scheint sehr spezifisch und fügt der angenommenen Antwort nichts wirklich hinzu. Natürlich können Sie Parameter von einer Liste oder dem aktuellen Benutzer erhalten ... Vielleicht fehlt mir hier der Punkt. – Kobi

+0

Der Inhalt der E-Mail wird in einer separaten Liste gespeichert und mit dieser Caml-Abfrage kann der Inhalt abgerufen und für E-Mails verwendet werden. –

0

mit Überlastung mit String Argumente (source)

StringDictionary headers = new StringDictionary();        
    headers.Add("to", currCtxt.Web.CurrentUser.Email); 
    headers.Add("cc", "[email protected]"); 
    headers.Add("bcc", ""); 
    headers.Add("from", "[email protected]"); 
    headers.Add("subject", "Email Subject"); 
    headers.Add("content-type", "text/html"); 
    string bodyText = "Hello how are you?"; 
    SPUtility.SendEmail(currCtxt.Web, headers, bodyText.ToString());