public Task <IBinding> TryCreateAsync(BindingProviderContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } ParameterInfo parameter = context.Parameter; SmtpAttribute attribute = parameter.GetCustomAttribute <SmtpAttribute>(inherit: false); if (attribute == null) { return(Task.FromResult <IBinding>(null)); } //if (context.Parameter.ParameterType != typeof(MailMessage) && // context.Parameter.ParameterType != typeof(MailMessage).MakeByRefType()) //{ // throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, // "Can't bind SmtpAttribute to type '{0}'.", parameter.ParameterType)); //} if (string.IsNullOrEmpty(_config.Host)) { throw new InvalidOperationException( string.Format("The Smtp Host must be set either via a '{0}' app setting, via a '{0}' environment variable, or directly in code via SmtpConfiguration.Host.", SmtpConfiguration.AzureWebJobsSmtpHost)); } if (_config.Port == 0) { throw new InvalidOperationException( string.Format("The Smtp Port must be set either via a '{0}' app setting, via a '{0}' environment variable, or directly in code via SmtpConfiguration.Port.", SmtpConfiguration.AzureWebJobsSmtpPort)); } if (string.IsNullOrEmpty(_config.User)) { throw new InvalidOperationException( string.Format("The Smtp User must be set either via a '{0}' app setting, via a '{0}' environment variable, or directly in code via SmtpConfiguration.User.", SmtpConfiguration.AzureWebJobsSmtpUser)); } if (string.IsNullOrEmpty(_config.Password)) { throw new InvalidOperationException( string.Format("The Smtp Password must be set either via a '{0}' app setting, via a '{0}' environment variable, or directly in code via SmtpConfiguration.Password.", SmtpConfiguration.AzureWebJobsSmtpPassword)); } return(Task.FromResult <IBinding>(new SmtpBinding(parameter, attribute, _config, _nameResolver, context))); }
public SmtpBinding(ParameterInfo parameter, SmtpAttribute attribute, SmtpConfiguration config, INameResolver nameResolver, BindingProviderContext context) { _parameter = parameter; _attribute = attribute; _config = config; _nameResolver = nameResolver; _smtpClient = new SmtpClient(); _smtpClient.Host = _config.Host; _smtpClient.Port = _config.Port; _smtpClient.EnableSsl = _config.EnableSsl; _smtpClient.Credentials = new NetworkCredential(_config.User, _config.Password); if (!string.IsNullOrEmpty(_attribute.To)) { _toFieldBindingTemplate = CreateBindingTemplate(_attribute.To, context.BindingDataContract); } if (!string.IsNullOrEmpty(_attribute.Cc)) { _ccFieldBindingTemplate = CreateBindingTemplate(_attribute.Cc, context.BindingDataContract); } if (!string.IsNullOrEmpty(_attribute.Bcc)) { _bccFieldBindingTemplate = CreateBindingTemplate(_attribute.Bcc, context.BindingDataContract); } if (!string.IsNullOrEmpty(_attribute.From)) { _fromFieldBindingTemplate = CreateBindingTemplate(_attribute.From, context.BindingDataContract); } if (!string.IsNullOrEmpty(_attribute.Subject)) { _subjectFieldBindingTemplate = CreateBindingTemplate(_attribute.Subject, context.BindingDataContract); } if (!string.IsNullOrEmpty(_attribute.Body)) { _bodyFieldBindingTemplate = CreateBindingTemplate(_attribute.Body, context.BindingDataContract); } }