當不使用SMTP的25連接埠號碼發送郵件,某些低許可權執行環境可以會拋出異常,最好還是在執行操作前進行許可權的檢查。
SMTP在.NET中對應的許可權是:SmtpPermission類型(還有聲明式的SmtpPermissionAttribute特性,他們都在System.Net.Mail命名空間下)。他的Access屬性控制許可權的內容。對應一個SmtpAccess枚舉。有3個值:None(沒有),Connect(串連預設連接埠25),ConnectToUnrestrictedPort(串連任意連接埠)。
下面是一個簡單的控制台代碼來檢測SMTP許可權:
//+ using System.Security;
//+ using System.Net.Mail;
static void Main(string[] args)
{
var smtpPermission = new SmtpPermission(SmtpAccess.Connect);
if (IsGranted(smtpPermission))
{
Console.WriteLine("允許SMTP 25連接埠");
var smtpPermission2 = new SmtpPermission(SmtpAccess.ConnectToUnrestrictedPort);
if (IsGranted(smtpPermission2))
Console.WriteLine("允許任何連接埠的SMTP");
}
}
//判斷當前應用程式定義域的許可權集
static bool IsGranted(IPermission per)
{
var pset = new PermissionSet(PermissionState.None);
pset.AddPermission(per);
return pset.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet);
}