#c# #asp.net #email #smtp #localhost
#c# #asp.net #Адрес электронной почты #smtp #localhost
Вопрос:
Как я могу получить LocalHostName, Ip-адрес компьютера, на котором размещено приложение. Для разработки это было бы localhost
для развертывания чем-то другим. Это мне нужно для инициализации SmtpClient для отправки электронных писем через приложение
SmtpClient emailClient = new SmtpClient("host","port");//port is optional
я ищу постоянное решение, без обходных путей и без перехвата ответа, запроса, и это может быть подделано [надеюсь, я не сумасшедший, потому что никто не может подделать данные серверов в заголовках, не так ли?]
Ответ №1:
Если вы хотите настроить класс SmtpClient, вам следует взглянуть на system.net > запись mailsettings в web.config :http://msdn.microsoft.com/en-us/library/w355a94k.aspx
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="network">
<network
host="localhost"
port="25"
defaultCredentials="true"
/>
</smtp>
</mailSettings>
</system.net>
</configuration>
И создать экземпляр StmpClient с помощью конструктора без параметров
var client = new SmtpClient();
Комментарии:
1. @mathieu работает ли это как в системах разработки, так и в системах развертывания? также как мне теперь инициализировать класс SmtpClient.
2. Вы можете использовать определенный конфигурационный файл для производства, если smtp-хост отличается от development
3. @mathieu я не смог до тебя дозвониться. Вышеуказанные настройки работают только для localhost, это то, что вы имеете в виду?
4. Приведенные выше настройки означают, что smtp-сервер расположен на хосте «localhost». Если сервер включен «stmp.mycompany.com «вы должны соответствующим образом отредактировать конфигурацию.
5. Если stmp-сервер находится на том же сервере, что и ваше приложение, настройки должны работать, поскольку «localhost» представляет локальную машину…
Ответ №2:
если вы используете
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
и
public static bool IsLocalIpAddress(string host)
{
try
{ // get host IP addresses
IPAddress[] hostIPs = Dns.GetHostAddresses(host);
// get local IP addresses
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
// test if any host IP equals to any local IP or to localhost
foreach (IPAddress hostIP in hostIPs)
{
// is localhost
if (IPAddress.IsLoopback(hostIP)) return true;
// is local address
foreach (IPAddress localIP in localIPs)
{
if (hostIP.Equals(localIP)) return true;
}
}
}
catch { }
return false;
}
он должен возвращать что-то вроде
IsLocalIpAddress("localhost"); // true (loopback name)
IsLocalIpAddress("127.0.0.1"); // true (loopback IP)
IsLocalIpAddress("MyNotebook"); // true (my computer name)
IsLocalIpAddress("192.168.0.1"); // true (my IP)
IsLocalIpAddress("NonExistingName"); // false (non existing computer name)
IsLocalIpAddress("99.0.0.1"); // false (non existing IP in my net)
это можно просто изменить, чтобы вернуть нужный вам адрес
Комментарии:
1. Все, что я хотел знать, это был ли какой-либо способ получить IP, имя хоста компьютера, на котором размещено asp.net приложение. И я получаю метод, в котором мне нужно ввести каждый хост и проверить наличие действительного хоста??
2. @Deeptechons первая часть вернет IP-адреса всех компьютеров, вам просто нужно выяснить, какой из ip-адресов использовать, поскольку некоторые из них будут локальными адресами, а другие — нет