<MailSettings> Use deliveryMethods 'Network' and 'SpecifiedPickupDirectory' simultaneously - asp.net

Exactly as it says on the tin: is it possible to specify both delivery methods in a single configuration? I'd figure it'd be a quick (and cheap) solution to log all e-mail messages that were sent directly by the standard .NET SmtpClient.
What I'm trying to achieve here is a solution in which every e-mail sent by an defaultly SmtpClient instance is both submitted directly to a configured SMTP server and stored in a pickup directory, which merely will act as a storage point for logging the sent e-mail messages.
In other words: Is a configuration as follows possible?
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="source#domain.com">
<network host="127.0.0.1" />
</smtp>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="C:\SmtpLog" />
</smtp>
</mailSettings>
</system.net>

Don't believe this is possible in the manner you suggest - see Scott Gutherie's response on http://weblogs.asp.net/scottgu/archive/2005/12/10/432854.aspx (search page for "multiple SMTP servers"). Old message but still current from what I can tell.
I think the system.net mailSettings in web.config are supposed to be considered the default settings.
However you can do it in code easily enough (plenty of examples out there) and you could do it so that you can configure in web.config using custom settings.

Related

Send Email when Error in ASP.Net MVC 5 using ELMAH

I am trying to send email whenever there is an exception in my code using Elmah.
Here is the configuration in web.config file.
<elmah>
<errorMail from="MyEmailId#gmail.com" to="MyEmailId#gmail.com"
async="true" smtpPort="0" useSsl="true" />
</elmah>
<system.net>
<mailSettings>
<smtp deliveryMethod ="Network">
<network host="smtp.gmail.com" port="587" userName="MyEmailId#gmail.com" password="MyEmailPassword" />
</smtp>
</mailSettings>
</system.net>
Now above configuration works fine. I tested in localhost every time I get an exception I am getting an Email Successfully.
Question 1:
Does that mean if I deploy my application with above settings, no
matter who ever access my website, if they get an exception I will
receive an email.
Question 2:
I have added password in above config file. But now everyone can see
my password. Is this the right way or I can still send the mail w/o
putting my password in config file.
Answer to question 1 :
Exceptions will be caught irrespective of the type of error module you
use. So you will definitely receive an email in those exception cases.
Answer to question 2 :
Why are you using your personal mail id? Create a new ID and use it
for the purpose, so that even if others see, it doesn't have any
effect. Others means only the developers will be able to see, not the
public. You can encrypt the web.config file by checking this MSDN
article.
Also consider encrypting your password and storing it in the
web,config file.

MvcMailer not working on production

I had my web.config mail section like that:
<smtp from="mail#gmail.com">
<network enableSsl="true" host="smtp.gmail.com" port="587" userName="mail#gmail.com" password="pwd" />
</smtp>
Tested locally,
but I got an error on production(i am using shared hosting environment):
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.
I googled I find out possible solution,
so I changed my configuration as:
<smtp from="mail#gmail.com">
<network enableSsl="true" host="smtp.gmail.com" port="587" userName="mail#gmail.com" password="pwd" defaultCredentials="true"/>
</smtp>
And now I got this error:
he SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. ko10sm114859924pbd.38 - gsmtp
How can I fix that?
I also tied to add delivery method:
<smtp from="mail#gmail.com" deliveryMethod="Network">
<network enableSsl="true" host="smtp.gmail.com" port="587" userName="mail#gmail.com" password="pwd" defaultCredentials="true"/>
</smtp>
But ho way.
UPDATE
I just checked my gmail and find out email from google
Someone recently used your password to try to sign in to your Google
Account xxxxxxx#gmail.com. This person was using an application such as
an email client or mobile device.
We prevented the sign-in attempt in case this was a hijacker trying to
access your account. Please review the details of the sign-in attempt:
Monday, January xxx.xxx UTC IP Address: xxx.xxx.xxx.xxx Location: Unknown
So may be it is the reason why email send not working on production.
Because it is a new location and when you sign in from a new location on gmail you should answer security questions. So it make scene then why email is not working.
So i am looking now how to unblock that locaton/ip address on gmail if it is possible.
Change this:
<smtp from="mail#gmail.com">
to this:
<smtp from="mail#gmail.com" deliveryMethod="Network">
Edit: I also found this question, hope it helps.
Edit 2: Other solutions:
asp.net The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required
set defaultCredentials="true" to false

Can I set ntlm authentication for a mail server via the web.config file?

Is it possible to specify that you want to use NTLM authentication for SMTP using system.net, all via the web.config file? If so, what needs to be done?
I've been told adding the following will cause NTLM or Kerberos to be used if the SMTP server requires it, but our SMTP server is not authenticating. (I'm no SMTP expert).
<configuration>
<system.net>
<mailSettings>
<smtp>
<network host="yourhost.com" userName="user#yourhost.com" password="yourpassword" port="yourport" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
E.g. Should there be authentication modules specified?
You may have a look at this blog

Mail settings in Web.config

Is it possible to set a "to" attribute in the mailSettings element in the Web.config file?
No, it isn't
Here is the docs for mailSettings: http://msdn.microsoft.com/en-us/library/w355a94k.aspx
Set the default "to" in an AppSetting instead and use that from you mail sending logic.
This is an example taken from the msdn docs:
<mailSettings>
<smtp deliveryMethod="network" from="ben#contoso.com">
<network
host="localhost"
port="25"
defaultCredentials="true"
/>
</smtp>
</mailSettings>
You can add a Key
<appSettings>
<add key="EmailToAddress" value="1337#gmail.com"/>
</appSettings>
And from your codebehind you can get it like this
var toAddress= ConfigurationManager.AppSettings["EmailToAddress"];
No, you can only specify where the mail is coming from:
MSDN Link
No it's not, but this would be highly restrictive as you'd likely want to send emails to many different people, perhaps based on some other data.
If you're only sending to one address all the time (such as an admin account) then I recommend just putting the address into the web.config as an 'appSetting' key and reading that instead.

Smtp Config in asp.Net

Hai,
I have developed small asp.net application.i send mail through this application.so my web config file have following coding
<network host="smtp.gmail.com" port="587" userName="username#domainname.com" password="*****" />
</smtp>
</mailSettings>
we have google apps.we don't have mail server.
i try to sent mail,i getting time out error.
regards
mariyappan.J
If you are using System.Net.Mail.MailMessage try this:
yourMailMessage.EnableSsl = true;
This could be:
Firewall related
IIS User account related
Have you tried smtp.googlemail.com Reading this it doesn't matter
I realise that's a bit of a generic answer but your config settings are correct so logically it can only be related to the network, or the user.

Resources