2015-05-18 32 views
11

Ho problemi a creare un semplice mock mail mock all'interno di un progetto ASP NET 5.Utilizzo di System.Net.Mail nel progetto ASP NET MVC 6

Ecco il metodo:

public static Task SendMail(string Email, string Subject, string Body) 
    { 
     SmtpClient client = new SmtpClient(); 
     client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
     client.PickupDirectoryLocation = "C:\\TMP"; 

     MailAddress from = new MailAddress("[email protected]", "Jane " + (char)0xD8 + " Clayton", System.Text.Encoding.UTF8); 
     MailAddress to = new MailAddress(Email); 

     MailMessage message = new MailMessage(from, to); 
     message.Body = Body; 
     message.BodyEncoding = System.Text.Encoding.UTF8; 
     message.Subject = Subject; 
     message.SubjectEncoding = System.Text.Encoding.UTF8; 

     client.Send(message); 
     message.Dispose(); 

     return Task.FromResult(0); 
    } 

ho incluso la dipendenza 'System.Net.Mail', ma un tooltip dice che la libreria è disponibile in DNX 4.5.1 ma non in DNX core 5.0, e il progetto non verrà compilato.

Nel mio project.json si trova:

"frameworks": { 
    "dnx451": { }, 
    "dnxcore50": { } 
} 
+0

Non credo che il 'SmtpClient' viene portato su .Net Nucleo. (Puoi usare http: //packagesearch.azurewebsites.net/per trovare i nuovi pacchetti NuGet e non ce n'è uno.) Hai bisogno di .Net Core? –

+1

No hai ragione: dal momento che è stato incluso di default nei modelli di progetto, ho pensato di averne bisogno, ma funziona senza di esso. Grazie ! –

+0

Vedi https://github.com/dotnet/corefx/issues/1006 –

risposta

5

non credo che lo SmtpClient viene portato su .Net Nucleo. (È possibile utilizzare il unofficial reverse package lookup per trovare i nuovi pacchetti NuGet, e non ce n'è uno.)

Dal momento che non è necessario Net core, è possibile rimuovere la voce dnxcore50 dal frameworks nel vostro project.json.

11

A partire da oggi, è ora possibile inviare e-mail in dnxcore50 oltre a net451 (e un sacco di altre piattaforme) utilizzando MailKit

sto usando RC1 di ASP.NET a 5 e ho aggiunto queste dipendenze di il mio project.json per portare nelle nugets necessari

"MimeKit": "1.3.0-beta1", 
"MailKit": "1.3.0-beta1" 

quindi la mancanza di System.Net.Mail in dnxcore50 non è più un problema, la biblioteca MailKit è in realtà molto più ricco di funzionalità rispetto a qualsiasi del vecchio sistema. Net.Mail roba.

Enorme Grazie a Jeffrey Stedfast per il suo duro lavoro.

+2

Tanto di cappello a Jeffrey Stedfast, ma il suo lavoro non avrebbe dovuto essere necessario. L'e-mail è un pezzo importante della maggior parte delle applicazioni web: conferma di registrazione, recupero password, notifiche di risposta al forum, conferme d'ordine, ecc. Il fatto che siamo in RC senza una porta delle classi di posta è leggermente deludente. Se un singolo sviluppatore può scrivere MailKit, in che modo un team di brillanti menti Microsoft che lavorano su ASP.net non porta il vecchio codice? Ostacolare Linux/OSX come alternative praticabili? Sto scavando molte nuove funzionalità/funzionalità, ma questa sembra un'omissione piuttosto seria. – Sam

+4

@Sam per non entrare in una lunga discussione qui su Stack Overflow, ma penso che sia un proverbio: * Come mangi un elefante? Un morso alla volta. * Si applica certamente al lavoro che Microsoft sta facendo su .NET Core. – ahsteele

+0

Vedere il backlog .Net Core su GitHub: https://github.com/dotnet/corefx/issues/1006 –

1

Per Nucleo .NET essere sicuri di ottenere MailKit aggiornando project.json per aggiungerlo come una dipendenza ...

"MailKit": "~1.6.0" 

Vedere MailKit su GitHub per un esempio completo: https://github.com/jstedfast/MailKit

0

Se hai impostato il tuo progetto in Visual Studio 2017, quindi questa soluzione funzionerà:

  1. Modifica il file .csproj del tuo progetto. Fare clic con il tasto destro del mouse sul nome del progetto e selezionare "Modifica progetto1.csproj" (nel caso in cui il nome del progetto sia Project1). Si apre il file XML del progetto. Cambia il 'TargetFramework' in net452 e aggiungi un tag 'RuntimeIdentifier' con valore win7-x86. Così si presenta così:

    [PropertyGroup] [targetFramework] net452 [/ targetFramework] [RuntimeIdentifier] win7-x86 [/ RuntimeIdentifier] [/ PropertyGroup]

(sostituire tutti parentesi bij segni "minore di" e "maggiore di") Il progetto sarà collegato a .NET Framework 4.5.2 e tutte le librerie saranno disponibili, incluso lo spazio dei nomi System.NET.Mail.

Per me, questa è una soluzione di lavoro ... :-)