I wrote a windows base application with C# which sends email from a unique address to another unique address every 5 minutes using google smtp. I installed it in 5 Systems of my Company.
It worked for about 500 messages.
today I recieved a "delivery failure" message and it stopped working.
the message was
Delivery to the following recipient failed permanently:
my email address
Technical details of permanent failure:
Message rejected. See http://support.google.com/mail/bin/answer.py?answer=69585 for more information.
I know Gmail blocked my address. but Is there any way to reactive it? I just using two email addresses.
From what I understand, you are using the first email account to broadcast a message, and the second email account to receive those message, which is a lazy way to solve the issue you have at hand and is prone to problems just like the one you've just witnessed. Sending out 500 notifications to a single email address, from a single email address will always raise red flags.
You have two options, you can either carry on using SMTP by using a different service provider and risk service disruptions as well as having your IP being blacklisted or you can create a simple API which the client applications can subscribe to.
Related
I know there many articles on web regarding sending emails from code/C# and I have read many of them before posting here, but I still don't see a clear picture of how to implement my requirements:
Scenario:
My application on mydomain.com receives a request to send some kind of email (from: someone#mydomain.com, to: someone#gmail.com/anyother.com).
I need to make some manipulations on email content.
After I modified a message, I need to send it directly to recipient.
Under directly to recipient I mean that I want to send it to recipient by our servers and not using some kind of SMTP service/relay.
So as I understand I can install some SMTP software on our servers and send using System.Net.Mail.SmtpClient to our server and it will deliver it to recipients using SMTP Relay or some other way that coded inside that software...but, I would like to make it without using SMTP Server software...
Till now I found that I need to discover MX record for recipients domain, so let's say I found MX record for gmail.com (gmail-smtp-in.l.google.com), but how do I send email to that MX Record from my own C# code?
Does System.Net.Mail.SmtpClient suitable for this task?
Where I can find examples of how to do it?
From my previous expirience with SmtpClient, I need to provide SMTP server address (optionaly port), credentials, but in my case, of course I do not have credentials and I'm not sure how to get the correct port (does all servers from MX records has port 25?).
Thanks!
I want to send an anonymous email to my own gmail/hotmail/yahoo/any other mail service address (Im not trying to spam or something like that).
Why? I have a .NET application and I want to add a "Send log to the developer" feature (attaching the log) using SmtpClient. The fact is I've read like 30+ pages, and found out, i.e. gmail's smtp client doesn't allow anonymous connections, and many other things.
The idea is to receive a mail message like this:
From: logs#myapp.com (non-existent email really)
To: myrealaddress#somedomain.com (this would be my real address which will recieve the logs attachments)
Subject: Issue report nºX (auto-generated)
Body: From a textbox
Attachments: logs attached
Is this possible? If so, how do I achieve it?
The short answer is that you can't reliably achieve this. You can get it to work in some cases, but not all.
Most email servers these days have spam filters and rules for checking on emails, and in most cases an empty 'From' address will result in special treatment. Sometimes that just means a slightly higher spam score from the receiving mail server, but in some cases an empty 'From' address will result in your email being silently dropped in the bit bucket. You have no control over this, and neither will your users. It's all down to how the receiving mail server is configured.
The simplest option is generally to allow the user to configure a from address and SMTP server. Some servers will require login to send messages, so you have to consider that. Many ISP mail servers (and most internal workplace mail servers) don't require login if the connection is coming from an address owned by the ISP (or workplace) and the email address is one that is registered as belonging there. Some ISPs - and this number is apparently growing - require SMTP login to send mail regardless.
Another option is to set up a source domain, configure the SPF record for the domain to allow email from any IP address, and use a standard 'From' address in that domain. The downside to this is that once someone discovers that you've opened up a domain that way they'll start using it to send spam and you'll get shut down.
There are many other options that have their own problems. One of the problems is that they generally cost money - some setup costs, most options also with ongoing costs - or open you up to liabilities of some sort.
Give your users the choice. Let them try various options and see what works for them: no 'From' address, user-defined 'From' address (same as 'To' address is a good first try), partial SMTP login, full SMTP login, etc. If they don't trust your code enough to put their passwords in, let them create a throw-away account on gmail or something to run the messages through.
I'm using a gmail account to send email notifications from the app,
but the problem appears when my customers start using this app. Gmail is blocking login attempts at my customer's locations and notify me about suspicious login attempts.
What is the best practice to send email notification from the app from different locations? I would like to keep the same sender email address.
Send your notice to a web service and have that send you an e-mail. Relying on user's email systems to be configured properly will lead to disappointment.
I was working on an application which would send emails automatically at specific time intervals to a valid email. Searching through the internet I found that most of the codes use the existing email accounts such as gmail.com to send email by logging in as an SMTP client. But my problem is that I won't be knowing the smtp server name of the users email(since the user is not generally aware of these things though he will be knowing the login/passoword). For example,
someone#gmail.com should give smtp.gmail.com and port number (465)
someone#nextek.net should give mail.nextek.net and port number (?)
someone#screaming.Net smtp.tiscali.co.uk and port number (?)
I got the MX records using the domain name of the email address, but I realized that it actually gives the available incoming SMTP server names.
For example gmail.com would give gmail-smtp-in.l.google.com along with four other server name if I ping using nslookup in command prompt.
Also what is the advantage of sending email by using an existing SMTP supporting email than sending directly by looking up the email server name through dns? Or is it not possible?
Correct me if I am wrong, since I am not much familiar with the protocols.
If you're not familiar with the protocols, it doesn't make sense for you to try to implement the protocol.
Generally, an application like yours doesn't need to worry about the details of the SMTP protocol. You would use an existing SMTP client library for your platform (I'm sure there is one for .NET you can use), and connect to an MTA (your MTA, not the recipient's), give it the email to send, and you're done. The MTA will take care of all the SMTP protocol details of figuring out how to get the email to the recipient.
Sending email is very similar to dropping a letter in the post box on the corner, and letting the post office figure out how to deliver it. You don't need to know which vehicle to put it on, or where the recipient's local post office distribution centre is, or any of those details.
You may choose to set up your own MTA using something like Postfix, or you can send email through your own Gmail account (of course you'll need a Gmail account and password before Gmail will let you do that).
I'm a big fan of the email feature available in Backpack, where it creates a unique email address per backpack page, and any emails sent to that address will be posted to the page.
My question is about how best to go about creating new email addresses automatically, and listening for new emails sent to those addresses. I'd like to do this from a C# service (I'm not using ASP.Net)
Has anyone tried to achieve this or
something similar before?
Are there libraries (preferably
FLOSS) already available which do
this or would assist me?
Is it possible to do this using a cloud-based
email service (and if so, what service?) and a
library for communicating with that
service (OpenPop.Net or similar)?
If your email provider supports setting up wildcard email on your domain, then you can do this with a single email account.
For example, Google Apps for Domains allows setting *#example.com to be delivered to myaccount#example.com. When someone emails sales#example.com or contact#example.com it will all be delivered to myaccount#example.com.
Then it's a process of getting all the emails. You then look at the to header in the email, match that with the name stored in your application for that user, and then process however you wish.
Be aware that you will get spam and other incorrectly addressed emails when you use this method. You will have to deal with these yourself (eg by discarding incorrectly mail that isn't addressed to a valid account).
I haven't played around much with incoming mails, but from the top level here is what you should do.
Create email addresses for the users based on any logic and save it in the DB.
Setup a mail server with your domain name and set one email account as a "catch-all" mail account. Any mail sent to your domain would then be caught under that mail account, in case the email address is not found.
Create a windows service, that would read mails from that "Catch-All" account. There are several libraries available to read mails using POP3 or IMAP.
Read the incoming mails to check the email address it was sent to, compare it with the values stored in the DB and process accordingly.
Check this question. it might help you with reading incoming mails.
The objective isn't to create email addresses, that doesn't really happen. What you do is accept email addresses at your system, what you accept is up to you. You could set up a mail server to receive any email sent to your domain, you could then parse the email To field and extract the 'name' portion. If it matches something you are listening for then you action it accordingly.
I don't think you'll find a library for this specific activity as it's rather insular. There are plenty of ways of receiving emails directly or indirectly and processing them in C# but I won't cover that as mail handling in .Net is well documented.