Artigo: 266452 - Última revisão: sexta-feira, 21 de Abril de 2006 - Revisão: 3.3

Como enviar um anexo no ASP com CDONTS e Acceptor registo

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Utilização de Collaboration Data Objects para o Microsoft Windows NT Server (CDONTS) para enviar correio electrónico de páginas ASP (Active Server Pages) tornou-se muito comum. Utilizando CDONTS juntamente com outras tecnologias, pode criar uma interface baseada na Web que permite aos utilizadores enviar anexos de correio electrónico. CDONTS executa no servidor para que o anexo de ficheiro deve ser enviado para o servidor antes de pode ser anexado a mensagem de correio electrónico.

O envio de ficheiros pode ser efectuado através do Microsoft Posting Acceptor. O ' Posting Acceptor ' está instalado no servidor e permite que um cliente coloca um ficheiro para o servidor Web de computador do utilizador. Este ficheiro pode ser enviado como um anexo para o correio electrónico.

Mais Informação

NOTA: O serviço SMTP (Simple Mail Transfer Protocol) deve ser activado e configurado para utilizar CDONTS. (Consulte a documentação dos serviços de informação Internet para obter detalhes).

Passos para anexar um ficheiro a uma mensagem

  1. Crie um novo projecto de aplicação Web chamado myEmailWebApp no Microsoft Visual InterDev no servidor Web com o Posting Acceptor instalado.
  2. Adicione uma página ASP de chamada default.asp ao projecto.
  3. Elimine o código que acompanha a página por predefinição.
  4. Adicione o seguinte código para a página:
    <%@ Language=VBScript %>
    <HTML>
    <HEAD>
    
    <%
    Dim strServerURL  'Server Name including http:// protocol
    strServerURL = "http://" + Request.ServerVariables("SERVER_NAME")
    
    Dim strServerURLFull 'Path to subweb directory
    strServerURLFull = strServerURL & "/myEmailWebApp"
    
    Dim strTargetURL  'Directory where we will upload our file to
    strTargetURL = strServerURLFull & "/uploaded_files"
    
    Dim strRepostURL  'Path to the page we will display after our file uploads
    strRepostURL = strServerURLFull & "/SendMail.asp"
    
    Dim strPathToPA   'Path to the cpshost.dll
    strPathToPA =  strServerURL & "/Scripts/cpshost.dll"
    
    Dim strPostingURL 'Action path for our form
    strPostingURL = strPathToPA + "?PUBLISH?" + strRepostURL
    %>
    
    
    
    </HEAD>
    <BODY bgcolor="white"> 
    <!--The Form must include the enctype properties set to "multipart/form-data" or the upload will fail. -->
    <FORM enctype="multipart/form-data" action="<%=strPostingURL %>" method="post" id="form1" name="form1">
    <INPUT type="hidden" name="TargetURL" value="<% = strTargetURL %>">
    <!--This hidden field is used to determine if a file post is being made.-->
    <INPUT type="hidden" name="bolAttach" value="true"> 
    	<CENTER>
    		<TABLE bgcolor=Gray border=1>
    			<tr>
    				<td>From:</td>
    				<!--Who is this message from.-->
    				<td><INPUT id="FromBox" name="FromBox" maxlength="50" value="myEmail@myDomain.com"></td>
    			<tr>
    			<tr>
    				<!--Who is this message To.-->
    				<td>To:</td>
    				<td><INPUT id="ToBox" name="ToBox" maxlength="50" value="myEmail@myDomain.com"></td>
    			<tr>
    			<tr>
    				<!--This message's Subject.-->
    				<td>Subject:</td>
    				<td><INPUT id="SubjectBox" name="SubjectBox" maxlength="50" value="Email with attachment.">
    				</td>
    				
    			</tr>
    			<tr>
    				<!--This message's body.-->
    				<td colspan="2"><br><br>Message:<br>
    				<TEXTAREA cols="40" id="MessageArea" name="MessageArea" rows="10">Here is the text for this message.</TEXTAREA>
    				<br>
    				</td>
    			</tr>
    				<tr>
    				<td colspan="2" align="Left" valign="center">
    				Specify File Attachment Paths: 
    				</td>
    			</tr>
    			<tr>
    				<!--Path to the file to attach to this message.-->
    				<td colspan="2" align="right" valign="center">
    				<INPUT name="my_file" type="file" size="20">
    				<br><br>
    				</td>
    			</tr>
    			<tr>
    				<!--This message's importance.-->
    				<td colspan="2" ><br>Importance Level:
    				<INPUT type="radio" id=optImpo name=optImpo value=0 checked>Low
    				<INPUT type="radio" id=optImpo name=optImpo value=1>Medium
    				<INPUT type="radio" id=optImpo name=optImpo value=2>High
    				<br></td>
    			<tr>
    			<tr>
    				<!--Validating Submit Button.-->
    				<td colspan="2" align="right" valign="center">
    				<INPUT type="button" value="Send" id="button1" name="button1" LANGUAGE="javascript" onclick="return button1_onclick()">
    				<INPUT type="reset" value="Reset" id="reset1" name="reset1">
    				</td>
    			</tr>
    		</TABLE>
    	</CENTER>
    </FORM>
    <SCRIPT ID="clientEventHandlersJS" LANGUAGE="javascript">
    <!--
    function button1_onclick() {
    	//Determine if there is a From address at all.
    	if(form1.FromBox.value =="")
    	{
    		//No from Address -Stop Submission
    		alert("You have not typed a From: Address.");
    		return;
    	}
    	//Determine if there is a To address at all.
    	if(form1.ToBox.value =="")
    	{
    		//No To Address -Stop Submission
    		alert("You have not typed a TO: Address.");
    		return;
    	}
    	//Determine if there is a subject at all.
    	if(form1.SubjectBox.value =="")
    	{
    		//No Subject - Question Submission
    		//Determine if they care.
    		var bolCancel = confirm("You have not typed a Subject continue?\n");
    		
    		if(bolCancel==false)
    		{
    			//User clicked Cancel -Stop Submission
    			return;
    		}
    	}
    	if(form1.MessageArea.value =="")
    	{
    		//No Message - Question Submission
    		//Determine if they care.
    		var bolStop = confirm("You have not typed a Message continue?\n");
    		
    		if(bolStop==false)
    		{
    			//User clicked Cancel -Stop Submission
    			return;
    		}
    	}
    	SubmitForm();
    }
    
    function SubmitForm()
    {
       //File counter for the number of files on the Form
       var FileNumber = 0;
       //FormMain is set to the form1 of the document
       var FormMain = document.forms("form1");
       //Loop counter
       var i;
       //Start at zero and loop until i is equal to the number of
       //elements in the page. Step i +1 per loop through
       for (i=0;i<FormMain.elements.length;i++)
       {
    	if (FormMain.elements[i].name == 'my_file' && FormMain.elements[i].value.length > 0)
    	{
    		FileNumber++;
    	}
       }
       //If there are files being posted then send the file to the Posting Acceptor
       //If not, skip to the send mail page with the Attachment boolean set to false.
       if(FileNumber==0)
       {
    	form1.bolAttach.value = "false"
    	form1.action = 'SendMail.asp';
    	//The encoding must be set to a different type in order to not 
    	//use the posting acceptor.
    	form1.encoding = 'application/x-www-form-urlencoded';
    	form1.submit(); 
       }
       else
       {
       //There are files attached use normal submit.
    	form1.submit();
       }
    };
    //-->
    </SCRIPT>
    </BODY>
    </HTML>
  5. No Visual InterDev clique com o botão direito do rato no nome do projecto no Explorador de projecto e seleccione Nova pasta no menu de contexto.
  6. Nome à pasta nova Uploaded_files .
  7. Abra a consola ' Gerenciador de serviços de Internet ' e navegue para a pasta Uploaded_files que criou.
  8. Clique com o botão direito do rato na pasta e, em seguida, clique em Propriedades .
  9. No separador directório seleccione permissões de leitura/escrita e, em seguida, clique em OK .
  10. Feche o Gestor dos serviços de Internet.
  11. Abra o Explorador do Windows e procure a pasta MyEmailWebApp em raiz : directório \Inetpub\Wwwroot.
  12. Clique com o botão direito do rato na pasta Uploaded_files e, em seguida, escolha Propriedades .
  13. No separador segurança , certifique-se de que a conta de convidado da Internet tem permissões de leitura/escrita/alteração na pasta.
  14. Clique em OK e, em seguida, feche O Explorador do Windows.
  15. No Visual InterDev, adicione uma página segunda SendMail.asp o nome da aplicação da Web.
  16. Elimine o código que acompanha a página por predefinição.
  17. Adicione o seguinte código para a página:
    <%@ Language=VBScript %>
    <HTML>
    <HEAD>
    <TITLE>E-mail Sent Confirmation</TITLE>
    </HEAD>
    <BODY>
    <HR>
    <%
    'Dim Message Variables
    Dim objMsg, strFrom, strTo, strSubject,lngImportance
    'Get the values to use with the message from the post.
    strFrom = lcase(Trim(Request.Form("FromBox")))
    strTo = lcase(Trim(Request.Form("ToBox")))
    strSubject = Request.Form("SubjectBox")
    lngImportance = CInt(Request.Form("optImpo"))
    
    'Create the Message Object
    Set objMsg = Server.CreateObject("CDONTS.NewMail")
    'Set the properties of the Message
    objMsg.From = strFrom
    objMsg.To = strTo
    objMsg.Subject = strSubject
    'Use the actual Request Object so that you do not over load the string Data type.
    objMsg.Body = Request.Form("MessageArea")
    objMsg.Importance = lngImportance
    
    'Determine if we need to attach a file.
    Dim bolAttachmentPosted
    bolAttachmentPosted = CBool(Request.Form("bolAttach"))
    If bolAttachmentPosted Then 
    	'If do then where on the server can we get it
    	FilePathOnServer= Server.MapPath("/myEmailWebApp/uploaded_files")
    	FilePath_Name = FilePathOnServer & "\" & Request.Form("FileName") & Request.Form("FileExtention") 
    	'Attach it
    	objMsg.AttachFile FilePath_Name
    End If
    
    'Send Message
    objMsg.Send 
    
    'Destroy the object
    Set objMsg = Nothing
    'Determine if there is a file on the server to delete.
    If bolAttachmentPosted Then 
    	Dim FSO
    	'Create a File System Object
    	Set FSO = server.CreateObject ("Scripting.FileSystemObject")
    	'Delete the file from the server
    	FSO.DeleteFile FilePath_Name
    	'Destroy the object
    	Set FSO = Nothing
    End If
    
    'Write out results
    Response.Write "The following message was sent via CDO for NTS:" & "<br>"
    Response.Write "From: " & strFrom  & "<br>"
    Response.Write "To: " & strTo  & "<br>"
    Response.Write "Subject: " & strSubject  & "<br>"
    Response.Write "Importance: " & lngImportance  & "<br>"
    Response.Write "Body: " & Request.Form("MessageArea")  & "<br>"
    
    
    %>
    </BODY>
    </HTML>
    					
  18. Clique em Guardar tudo na barra de ferramentas.
  19. Clique com o botão direito do rato no ficheiro default.asp e, em seguida, seleccione Ver no browser .

Referências

222618  (http://support.microsoft.com/kb/222618/EN-US/ ) Utilização de ASP e nomes de utilizador com o registo Acceptor
260317  (http://support.microsoft.com/kb/260317/EN-US/ ) Configurar Acceptor registo para enviar aos servidores remoto
189651  (http://support.microsoft.com/kb/189651/EN-US/ ) Enviar um ficheiro para o IIS utilizando um browser
250384  (http://support.microsoft.com/kb/250384/EN-US/ ) Registo Acceptor AllowAnonymous enviar Repost falha no Windows
186204  (http://support.microsoft.com/kb/186204/EN-US/ ) Como utilizar CDONTS para recolher e informações de correio a partir de um utilizador
177850  (http://support.microsoft.com/kb/177850/EN-US/ ) INFO: O que é a diferença entre o CDO 1.2 e CDONTS?
189945  (http://support.microsoft.com/kb/189945/EN-US/ ) Como enviar HTML formatado correio através de SMTP utilizar CDONTS

A informação contida neste artigo aplica-se a:
  • Microsoft Visual InterDev 6.0 Standard Edition nas seguintes plataformas
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows NT 4.0
Palavras-chave: 
kbmt kbhowto kbsample kbscript KB266452 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 266452  (http://support.microsoft.com/kb/266452/en-us/ )