2009-08-21 5 views
0

J'ai essayé plusieurs variantes de ASP & PHP natif & Programmes de messagerie tiers. J'ai frappé un mur à presque tous les points entre la définition des paramètres ini à l'intérieur des scripts et l'autorisation refusée/transport échoue.Configuration la plus simple du formulaire de courrier électronique sur IIS 6 en utilisant PHP ou ASP

Je perdrais mon temps à montrer mes exemples pour ce que j'ai essayé jusqu'ici. Toutes mes recherches produisent trop de résultats avec trop de forums avec trop d'installations tierces. Je veux trouver le moyen le plus simple de le configurer. Je ne me soucie pas de la mise en forme html fantaisie, des pièces jointes, des couleurs, des boutons radio, des cases à cocher, etc ... J'aimerais juste trouver quelque chose avec un champ de formulaire texte et un bouton de soumission qu'en cliquant, il enverra un simple email à moi. Je pensais que ce serait beaucoup plus facile, mais je n'ai jamais travaillé avec des serveurs IIS auparavant.

Une approche étape par étape ou un lien vers une ressource réelle testée serait grandement apprécié.


EDIT
Le plus proche je suis arrivé, avec le moins cryptique des messages d'erreur était avec ce code asp de tizag ...

<% 
'Sends an email 
Dim mail 
Set mail = Server.CreateObject("CDO.Message") 
mail.To = Request.Form("To") 
mail.From = Request.Form("From") 
mail.Subject = Request.Form("Subject") 
mail.TextBody = Request.Form("Body") 
mail.Send() 
Response.Write("Mail Sent!") 
'Destroy the mail object! 
Set mail = nothing 
%> 

L'erreur que j'obtenons est:

Erreur CDO.Message.1 '80040220'

La valeur de configuration "SendUsing" n'est pas valide.

+0

La façon la plus simple (pour moi) sur IIS6 serait ASP.NET. Est-ce une option? Si oui, je vais poster les étapes et le code. – ConsultUtah

+0

mal donner une chance ... allez-y – CheeseConQueso

Répondre

3

Pour ASP.NET:

Installer ASP.NET - Je suppose que vous avez la version 2, 3 ou 3.5 .NET installé. Dans une invite de commande:

cd \Windows\Microsoft.NET\Framework\v2.0.50727 
aspnet_regiis.exe -i 

Créer un fichier dans le répertoire virtuel approprié (peut-être inetpub \ wwwroot?) Appelé email.aspx avec le texte suivant:

<%@ Page language="c#" %> 
<%@ Import Namespace="System.Net.Mail" %> 

<script runat="server"> 
    protected void SendButton_Click(object sender, EventArgs e) 
    { 
     MailMessage message = new MailMessage(
       "[email protected]", 
       FromEmail.Text, 
       Subject.Text, 
       Message.Text); 

     SmtpClient client = new SmtpClient("127.0.0.1"); 
     client.Send(message); 
    } 
</script> 

<html> 
    <body> 
     <form runat="server"> 
      <table> 
       <tr> 
        <td>From Email:</td> 
        <td><asp:TextBox id="FromEmail" runat="server" /></td> 
       </tr> 
       <tr> 
        <td>Subject:</td> 
        <td><asp:TextBox id="Subject" runat="server" /></td> 
       </tr> 
       <tr> 
        <td>Message:</td> 
        <td><asp:TextBox id="Message" runat="server" TextMode="MultiLine" /></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td><asp:Button id="SendButton" runat="Server" Text="Send" OnClick="SendButton_Click" /></td> 
       </tr> 
      </table> 
     </form> 
    </body> 
</html> 

Vous aurez besoin de changer la chaîne "127.0.0.1" à l'adresse IP de votre serveur SMTP et vous devrez changer le "[email protected]" à l'adresse e-mail que vous souhaitez envoyer le courrier.

Vous pouvez également demander à l'utilisateur d'entrer une adresse e-mail (et une adresse valide), un sujet et un message, en ajoutant RequiredFieldValidator et RegularExpressionValidator.

+0

erreur d'exécution sur celui-ci .... Erreur du serveur dans '/' Application. – CheeseConQueso

+0

Est-ce que ça dit quelle est l'erreur? – ConsultUtah

+0

Description: Une erreur d'application s'est produite sur le serveur. Les paramètres d'erreur personnalisés actuels pour cette application empêchent l'affichage à distance des détails de l'erreur d'application (pour des raisons de sécurité). Il peut cependant être consulté par les navigateurs s'exécutant sur la machine du serveur local. Détails: Pour que les détails de ce message d'erreur spécifique soient visibles sur les machines distantes, créez une balise dans un fichier de configuration "web.config" situé dans le répertoire racine de l'application Web en cours. Cette balise devrait alors avoir son attribut "mode" sur "Off". – CheeseConQueso

1

Envoyer un email à ASP using the CDO.Message object est vraiment facile.

Voici un exemple plus complexe avec la gestion des erreurs et la validation des adresses e-mail.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> 
<% Option Explicit %> 
<% 
    Dim bPostback : bPostback = request.ServerVariables("REQUEST_METHOD") = "POST" 
    Dim sResult : sResult = "" 

    If bPostBack Then 
     Dim sSmtpServer : sSmtpServer = "your.smtp.server" 
     Dim sToEmail : sToEmail = "[email protected]" 
     Dim sFromEmail : sFromEmail = request.Form("email") 
     Dim sName : sName = request.Form("name") 
     Dim sSubject : sSubject = request.Form("subject") 
     Dim sBody : sBody = request.Form("body") 

     Dim oEmailer : Set oEmailer = New Emailer 

     oEmailer.SmtpServer = sSmtpServer 
     oEmailer.FromEmail = sFromEmail 
     oEmailer.ToEmail = sToEmail 
     oEmailer.Subject = sSubject 
     'oEmailer.HTMLBody = "" 
     oEmailer.TextBody = sBody 


     If oEmailer.sendEmail Then 
      sResult = "Email sent!" 
     Else 
      sResult = "Something went terribly wrong!(" + oEmailer.ErrMsg + ")" 
     End If 
    End If 

    'Simple Emailer 
    Class Emailer 
     Private oCDOM 
     Public FromEmail 
     Public ToEmail 
     Public Subject 
     Public HTMLBody 
     Public TextBody 
     Public SmtpServer 
     Public Port 
     Public ErrMsg 

     Private Sub Class_Initialize() 
      Set oCDOM = Server.CreateObject("CDO.Message") 

      TextBody = "" 
      'HTMLBody = "" 
      Port = 25 
     End Sub 

     'SQL IsNull equivalent 
     Private Function ifNull(vVar1, vVar2) 
      If Not IsNull(vVar1) Then 
       ifNull = vVar1 
      Else 
       ifNull = vVar2 
      End If 
     End Function 

     'Verifies that the Email address conforms to RFC standard. 
     Public Function isEmail(emailStr) 
      isEmail = False 
      If IsNull(emailStr) Then Exit Function 

      Dim emailPat : emailPat = "^([a-zA-Z0-9_\-])+(\.([a-zA-Z0-9_\-])+)*@((\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\]))|((([a-zA-Z0-9])+(([\-])+([a-zA-Z0-9])+)*\.)+([a-zA-Z])+(([\-])+([a-zA-Z0-9])+)*))$" 
      Dim loRE : Set loRE = New RegExp 

      loRE.IgnoreCase = True 
      loRE.Global = True 
      loRE.Pattern = emailPat 

      If loRE.Test(emailStr) Then isEmail = True 
      Set loRE = Nothing 
     End Function 

     Public Function sendEmail() 
      sendEmail = True 

      'On Error Resume Next 

      If IfNull(SmtpServer,"") = "" Then sendEmail = False 
      If Not isEmail(FromEmail) Then sendEmail = False 
      If Not isEmail(ToEmail) Then sendEmail = False 
      If IfNull(Trim(Subject),"") = "" Then sendEmail = False 
      If IfNull(Trim(HTMLBody),"") = "" And IfNull(Trim(TextBody),"") = "" Then sendEmail = False 
      If sendEmail = False Then Exit Function 

      oCDOM.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing")=2 
      oCDOM.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver")=SmtpServer 
      oCDOM.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=CINT(Port) 
      oCDOM.Configuration.Fields.Update 

      oCDOM.From = FromEmail 
      oCDOM.To = ToEmail 
      oCDOM.Subject = Subject 
      'oCDOM.HTMLBody = "<div>" & HTMLBody & "<div>" 
      oCDOM.TextBody = TextBody 

      oCDOM.Send 

      If Err.Number <> 0 Then 
       ErrMsg = Err.description 
       Err.Clear 
       sendEmail = False 
       Exit Function 
      Else 
       sendEmail = True 
       Exit Function 
      End If 
     End Function 

     Private Sub Class_Terminate() 
      Set oCDOM = Nothing 
     End Sub 
    End Class 
%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
     <title>Emailer</title> 
    </head> 
    <body> 
     <p><strong><%=sResult%></strong></p>  
     <form action="" method="post" target="_self"> 
      <label for="name">Name:</label><input id="name" name="name" type="text" size="50" maxlength="50" /> 
      <br /> 
      <label for="email">Email:</label><input id="email" name="email" type="text" size="50" maxlength="1024" /> 
      <br /> 
      <label for="subject">Subject:</label><input id="subject" name="subject" type="text" size="50" maxlength="1024" /> 
      <br /> 
      <label for="body">Body:</label> 
      <br /> 
      <textarea id="body" name="body"></textarea> 
      <br /> 
      <input name="Submit" value="Submit" type="submit" /> 
     </form> 
    </body> 
</html> 
+0

erreur CDO.Message.1 '80040213' Le transport n'a pas connectez-vous au serveur. – CheeseConQueso

+0

Question stupide, avez-vous remplacé "your.smtp.server" sur la ligne 8 avec votre serveur SMTP? Votre serveur SMTP nécessite-t-il une authentification pour envoyer des e-mails? – MyItchyChin

+0

ouhaha haha ​​... ne sais pas sur l'auth ... allaient vérifier les paramètres du serveur le lundi – CheeseConQueso

1

Pour votre exemple ASP, je pense que vous manque seulement la configuration du serveur smtp:

<% 
'Sends an email 
Dim mail 
Set mail = Server.CreateObject("CDO.Message") 
mail.To = Request.Form("To") 
mail.From = Request.Form("From") 
mail.Subject = Request.Form("Subject") 
mail.TextBody = Request.Form("Body") 

mail.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/sendusing")=2 
'Name or IP of remote SMTP server 
mail.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.server.com" 
'Server port 
mail.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25 
mail.Configuration.Fields.Update 


mail.Send() 
Response.Write("Mail Sent!") 
'Destroy the mail object! 
Set mail = nothing 
%> 

Comme dans l'exemple ASP.NET, vous devez changer "smtp.server.com" à l'adresse IP de votre serveur SMTP.

+0

Erreur d'exécution Microsoft VBScript '800a01a8' Objet requis: 'myMail' – CheeseConQueso

+0

Fixé ci-dessus. Désolé pour le – ConsultUtah

1

PHP: utilisez la méthode intégrée mail (...). Si vous ne faites rien de fantaisie, vous pouvez l'utiliser directement.

Exemple:

form.php 
<?php 
if($_REQUEST['action']=='mail'){ 
    $to="[email protected]"; 
    $from="[email protected]"; 
    $subject="this is my subject"; 
    $body=$_POST['body']; 
    $headers="From: $from\r\nTo: $to\r\nSubject: $subject\r\n"; 

    if (stristr($to,"Content-Type")||stristr($subject,"Content-Type")||stristr($body,"Content-Type")||stristr($headers,"Content-Type")) { 
      header("HTTP/1.0 403 Forbidden"); 
      echo "YOU HAVE BEEN BANNED FROM ACCESSING THIS SERVER FOR TRIGGERING OUR SPAMMER TRAP"; 
      exit; 
    } 

    if(mail($to,$subject,$body,$headers)){ 
     echo("Succesfully mailed to $to"); 
     exit(); 
    }else{ 
     echo("Failed to send mail<br>"); 
    }   
} 
?> 
<form method=post> 
    <input type=hidden name=action value=mail> 
    <textarea name=body rows=4 cols=40><?php echo($_POST['body']); ?></textarea> 
    <input type=submit value=Send> 
</form> 

PS: Le contrôle Content-Type est d'empêcher quelqu'un de votre formulaire de détournement email. PSS: Cela va utiliser le serveur de messagerie tel que défini dans php.ini, c'est le seul paramètre qui devrait importer.

+0

de typo J'ai essayé celui-ci avant ....... N'a pas pu exécuter le programme de livraison de courrier – CheeseConQueso

0

Ce travail pour moi en utilisant ASP classique: http://www.powerasp.net/content/new/sending_email_cdosys.asp

Dim ObjSendMail 
Set ObjSendMail = CreateObject("CDO.Message") 

'This section provides the configuration information for the remote SMTP server. 

ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'Send the message using the network (SMTP over the network). 
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="remoteserver" 
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False 'Use SSL for the connection (True or False) 
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 


ObjSendMail.Configuration.Fields.Update 

'End remote SMTP server configuration section== 

ObjSendMail.To = "[email protected]" 
ObjSendMail.Subject = "this is the subject" 
ObjSendMail.From = "[email protected]" 

' we are sending a text email.. simply switch the comments around to send an html email instead 
'ObjSendMail.HTMLBody = "this is the body" 
ObjSendMail.TextBody = "this is the body" 

ObjSendMail.Send 

Set ObjSendMail = Nothing 
Questions connexes