Domanda

Esiste un modo per impostare EnableSSL da web.config?

Potrei impostare questa proprietà nel codice, ma non funzionerebbe per l'evento Web Simple Mail e altre classi che utilizzano il server Smtp predefinito. Qualche idea?

È stato utile?

Soluzione

Per .NET 3 e precedenti: non puoi. Devi gestirlo a mano.

Per maggiori informazioni puoi vedere https://blogs.msdn.microsoft.com/vikas/2008/04/29/bug-asp-net-2 -0-PasswordRecovery-web-control-can / .

non-email-to-ssl-enabled SMTP-server send-

Per .NET 4: è possibile.

Vedi http: // theoldsewingfactory. com / 2011/01/06 / enable-ssl-in-web-config-per-smtpclient /

<configuration>
    <system.net>
        <mailSettings>
            <smtp deliveryMethod=”network”>
                <network host="localhost"
                         port="25"
                         enableSsl="true"
                         defaultCredentials="true" />
            </smtp>
        </mailSettings>
    </system.net>
</configuration>

Altri suggerimenti

Ho una soluzione sporca (fino alla pubblicazione di .NET 4.0). Invece di modificare il mio codice, si basa sulla porta utilizzata per determinare se SSL è necessario o meno.

var client = new SmtpClient();
client.EnableSsl = client.Port == 587 || client.Port == 465;
// This could also work
//client.EnableSsl = client.Port != 25;

Ho detto che era un trucco sporco, ma funzionava bene per le diverse configurazioni che incontriamo.

questo funziona per me in .net 4

es. in web.config

network host="somesmtpserver" userName="do_not_reply@yourserver.com" 
password="whatever" port="25" enableSsl="true"         

Dice Giles Roberts il 18 gennaio 12 alle 18:01

questo funziona per me in .net 4

es. in web.config

network host="somesmtpserver" userName="do_not_reply@yourserver.com" 
password="whatever" port="25" enableSsl="true" 

La porta 25 non è una porta SSL. La porta 25 è la porta SMTP predefinita. Inoltre, il codice web.config è parzialmente compilato. Il codice dovrebbe essere

    <system.net>
         <mailSettings>
              <smtp deliveryMethod="Network" from="user@gmail.com">
                     <network host="smtp.gmail.com"
                     userName="user@gmail.com"
                     password="********"
                     port="587"
                     defaultCredentials="true"
                     enableSsl="true" />
             </smtp>
        </mailSettings>
   </system.net>

Queste impostazioni sopra sono più precise del codice web.config originale. Non so che il metodo delle streghe sia migliore. Usando web.config o usando la pagina code-behind per inviare l'e-mail. Indipendentemente dal metodo che usi per usare il file code-behind, deve essere modificato. Lo dico perché devi collegare le caselle di testo Da, Oggetto e Corpo. Sto dando per scontato che il risultato finale che si desidera inviare un messaggio attraverso una pagina web aspx

Ah, c'è un modo per farlo per i controlli di accesso .net integrati nella 'password dimenticata'.

Vedi http://blogs.msdn.com/vikas/archive/2008/04/29/bug-asp-net-2-0- PasswordRecovery-web-control-can not--email-to-ssl-enabled-smtp-inviare servers.aspx

Ryan

Sembra che la classe sia sigillata, quindi ho fatto un'estensione manuale. Ho pensato di fornirlo per gli altri qui. Spero che possa essere utile agli altri.

/// <summary>
/// OldSchool extension of SmtpNetWorkElement, since it's sealed.
/// </summary>
public class SmtpNetworkElementEx
{
    private readonly SmtpNetworkElement m_SmtpNetWorkElement;

    /// <summary>
    /// Initializes a new instance of the <see cref="SmtpNetworkElementEx"/> class.
    /// </summary>
    public SmtpNetworkElementEx()
    {
        Configuration configurationFile = WebConfigurationManager.OpenWebConfiguration("~/web.config");
        var mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;

        if (mailSettings == null)
            return;

        m_SmtpNetWorkElement = mailSettings.Smtp.Network;
    }

    public string Host { get { return m_SmtpNetWorkElement.Host; } }
    public bool DefaultCredentials { get { return m_SmtpNetWorkElement.DefaultCredentials; } }
    public string ClientDomain { get { return m_SmtpNetWorkElement.ClientDomain; } }
    public string TargetName { get { return m_SmtpNetWorkElement.TargetName; } }
    public int Port { get { return m_SmtpNetWorkElement.Port; } }
    public string UserName { get { return m_SmtpNetWorkElement.UserName; } }
    public string Password { get { return m_SmtpNetWorkElement.Password; } }
    public bool EnableSsl { get { return Convert.ToBoolean(m_SmtpNetWorkElement.ElementInformation.Properties["enableSsl"].Value); } }
}

Usa in questo modo:

var smtpSettings = new SmtpNetworkElementEx();

_smtpClient.Host = smtpSettings.Host;
_smtpClient.Port = smtpSettings.Port;
_smtpClient.EnableSsl = smtpSettings.EnableSsl;
_smtpClient.Credentials = new System.Net.NetworkCredential(smtpSettings.UserName, smtpSettings.Password);

Ho cercato quasi ovunque per questo.

Ma sembra che non sia possibile configurare la proprietà EnableSsl in web.config.

Dai un'occhiata a this

Penso che ci sia un bug nel MailSettingsSectionGroup . Vedi sotto il codice:

Configuration configurationFile = WebConfigurationManager.OpenWebConfiguration("~/web.config");
var mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;

_smtpClient.Host = mailSettings.Smtp.Network.Host;
_smtpClient.Port = mailSettings.Smtp.Network.Port;
_smtpClient.EnableSsl = mailSettings.Smtp.Network.**EnableSsl**;
_smtpClient.Credentials = new System.Net.NetworkCredential(mailSettings.Smtp.Network.UserName, mailSettings.Smtp.Network.Password);
_smtpClient.UseDefaultCredentials = false;

Sembra che EnableSsl non esiste come proprietà in Rete perché quando eseguo ed eseguo il debug di questo, posso vedere il valore, ma non riesco a compilare il codice a causa di ExtensionMethod mancante.

Questo è il codice che uso nel mio file web.config.  inserisci qui la descrizione dell'immagine

Basta estendere la classe e impostare EnableSsl = true e utilizzare quella classe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top