The information provided here is intended to assist our customers in developing web based forms for the purpose of generating emails from thier domains.
Before we go into detail on how to get your email form working, let's look at some ground rules that will ensure your mail isn't blocked:
MyUKHost redirects all web based mail to an SMTP Filter System. Mails must have either a valid "from" or "to" address which is a domain hosted with MyUKHost. Any mail that doesn't fulfil these criteria is dropped. If you are sending mail to a customer who has given you his email address, you need to use the domain name of the site (note that it does not need to be a valid mailbox on the account) noreply@domain.tld is a fairly common one to use. Remember to use a valid account if you want the customer to reply to the email.
MyUKHosts' SMTP Filter System rate limits outgoing mail from any domain. This prevents bulk emailing. Our limits are set to allow normal form based email activity to pass unhindered, but stop any persistent attempt to send bulk mail.
Do not use your site for mass emailing (spam). The SMTP Filter System will prevent this, and the information gets logged. Attempting to bulk email will lead to your site being closed by our abuse department.
This page is split into two sections one section for the Windows Platform using CDONTS and another for the Linux Platform using JMail
SENDING MAIL ON A WINDOWS SERVER PLATFORM
Using CDONTS in ASP to Provide Email on Your Site
The first thing to do is to make sure your form in the submitting page is correct. In its simplest form it should look like:
<form action="cdonts.asp" method="post" name="mailform">
<input name="email" type="text" size="40">
<input name="email_submit" type="submit" value="send mail">
</form> |
Now to the real scripting. Using the example submit form above, this is the code in the cdonts.asp file. First initialize the variables - though this isn't strictly necessary, its good programming practice to do so.
| dim oCdonts, intDHash, intHash, strReferer, strServer, strClientIP, strServerIP, blnSpam |
Next set up the CDONTS object.
| set oCdonts = server.createobject("CDONTS.Newmail") |
After that obtain some information about the site using the request.servervariables object. Note that we get the referrer page here. This is the page that carried out the page post operation.
|
strReferer = request.servervariables("HTTP_REFERER")
strServer = Replace(request.servervariables("SERVER_NAME"), "www.", "")
strClientIP = request.servervariables("REMOTE_ADDR")
strServerIP = request.servervariables("LOCAL_ADDR")
strFrom = "noreply@" & strServer |
Now use this information to check that the posting page is on the same site as the script. This prevents others using your script for bulk emailing activities - see the note at the bottom of this page.
|
intComp = inStr(strReferer, strServer)
If intComp > 0 Then
blnSpam = False
Else
' Spam Attempt Block
blnSpam = True
End If |
Next populate the CDONTS object with the correct data. Note that we use the server information to set up the sender and the smtp server. The recipient is obtained from the request object.
oCdonts.to = request.form("email")
oCdonts.from = strFrom
oCdonts.Subject = "CDONTS Test Mail"
oCdonts.body = "This test mail has been sent from server "
oCdonts.body = oCdonts.body & request.servervariables("LOCAL_ADDR") & " via CDONTS mail objects." |
This bit of code checks the referrer is correct, and if so sends the mail through CDONTS to the local SMTP server queue.
If NOT blnSpam Then
oCdonts.send
strResult = "Mail Sent."
Else
strResult = "Mail Not Sent."
End If |
After outputting whatever text you want to tell the client that the job is done, clean up the objects we have used.
That's it.
SENDING MAIL ON A LINUX SERVER PLATFORM
First make sure your form in the submitting page is correct. In its simplest form it should look like:
<form action="cgi-bin/jmail.pl" method="post" name="mailform">
<input name="email" type="text" size="40">
<input name="email_submit" type="submit" value="send mail">
</form> |
Now to the real scripting.
Using the example submit form above, this is the code in the jmail.pl file. Note that this script is placed in the cg-bin directory because it has the necessary permissions to execute perl scripts.
First, initialize the necessary units and set up the JMail object,
use OLE;
use CGI;
$jmail = CreateObject OLE "JMail.SMTPMail"; |
output the HTML headers,
| print "Content-type: text/html\n\n"; |
and get the recipient and header information from the post page. Note that we get the referrer page here, and extract the domain name.
$form = new CGI;
$Recipient=$form->param('email');
$domain = $ENV {'SERVER_NAME'};
$referer = $ENV {'HTTP_REFERER'};
$url = $referer;
$url =~ s/^http:\/\///i;
$url =~ s/^www\.//i;
$domain =~ s/^www\.//i; |
Next we set up the mail object,
$Sender = "noreply\@$domain";
$SMTPServer = "smtp.$domain:25";
$Subject = "JMail Example";
$Body = "This test mail sent from: $ENV{'LOCAL_ADDR'} using the JMail component on the server via Perl.";
$Priority=3;
$Header = "Originating-IP", $ENV{'REMOTE_ADDR'}; $jmail->{ServerAddress} = $SMTPServer;
$jmail->{Sender} = $Sender;
$jmail->{Subject} = $Subject;
$jmail->AddRecipient ($Recipient);
$jmail->{Body} = $Body;
$jmail->{Priority} = $Priority;
$jmail->AddHeader ($Header); |
and then check the referrer to ensure that the posting page is on the same site as the script. This prevents others using your script for bulk emailing activities - see the note at the bottom of this page.
if ($url =~ m/^$domain/)
{
$mailmessage = "mail sent";
$jmail->Execute;
}
else
{
$mailmessage = "mail was not sent. Incorrect Referer";
} |
Finally we output the results.
print "Result: $mailmessage Recipient: $Recipient";
print "Sender: $Sender SMTP Server: $SMTPServer";
print "Subject: $Subject Referer: $referer";
print "Domain: $domain url: $url "; |
With Perl, all resources used are destroyed at the end of the script, so we don't need to close and destroy objects we have used.
Note - If you don't protect your scripts by checking the referrer, you will leave them open to abuse by bulk mailers. If this happens you site may be closed by our abuse department.
|