Uso de Collaboration Data Objects para Microsoft Windows NT Server (CDONTS) para enviar email de páginas Active Server Pages (ASP) tornou-se muito comuns. Usando CDONTS juntamente com outras tecnologias, você pode criar uma interface baseada na Web que permite aos usuários enviar anexos com seus emails. CDONTS executa no servidor para que o anexo de arquivo deve ser carregado no servidor antes de poder ser associado ao email.
O carregamento de arquivo pode ser feito por meio do Microsoft Posting Acceptor. O Posting Acceptor é instalado no servidor e permite que um cliente enviar um arquivo para o servidor Web do computador do usuário. Este arquivo, em seguida, pode ser enviado como um anexo ao email.
Observação: O serviço SMTP (Simple Mail Transfer Protocol) deve ser ativado e configurado para usar o CDONTS. (Consulte a documentação do IIS para obter detalhes.)
Etapas para anexar um arquivo a uma mensagem
- Crie um novo projeto de aplicativo Web chamado myEmailWebApp em Microsoft Visual InterDev no servidor Web com Posting Acceptor instalado.
- Adicione uma página ASP chamada default.asp para o projeto.
- Exclua o código que vem com a página por padrão.
- Adicione o seguinte código à 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> - No Visual InterDev clique com o botão direito do mouse no nome do projeto no Explorador de projeto e escolha Nova pasta a partir do menu pop-up.
- Nomeie a nova pasta Uploaded_files .
- Abra o Console Gerenciador de serviços de Internet e navegue até a pasta Uploaded_files que você criou.
- Clique com o botão direito na pasta e, em seguida, clique em Propriedades .
- Na guia Directory selecione permissões de leitura/gravação e, em seguida, clique em OK .
- Feche o Gerenciador de serviços da Internet.
- Abra o Windows Explorer e navegue para a pasta MyEmailWebApp sob a raiz : diretório \Inetpub\Wwwroot.
- Clique com o botão direito na pasta Uploaded_files e escolha Propriedades .
- Na guia segurança Verifique se a conta de convidado da Internet tem permissões de leitura/gravação/alteração na pasta.
- Clique em OK e feche o Windows Explorer.
- No Visual InterDev, adicione uma segunda página chamada SendMail.asp ao aplicativo Web.
- Exclua o código que vem com a página por padrão.
- Adicione o seguinte código à 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>
- Clique em Salvar tudo na barra de ferramentas.
- Clique com o botão direito no arquivo default.asp e selecione View in Browser .
222618
(http://support.microsoft.com/kb/222618/EN-US/
)
Usando o ASP e nomes de usuário com Posting Acceptor
260317
(http://support.microsoft.com/kb/260317/EN-US/
)
Configurando o Posting Acceptor para carregar com servidores remotos
189651
(http://support.microsoft.com/kb/189651/EN-US/
)
Carregando um arquivo para o IIS usando um navegador
250384
(http://support.microsoft.com/kb/250384/EN-US/
)
Lançamento Acceptor AllowAnonymous carregar Repost falha no Windows
186204
(http://support.microsoft.com/kb/186204/EN-US/
)
Como usar o CDONTS para coletar e as informações de email de um usuário
177850
(http://support.microsoft.com/kb/177850/EN-US/
)
INFO: O que é a diferença entre CDO 1.2 e CDONTS?
189945
(http://support.microsoft.com/kb/189945/EN-US/
)
Como enviar HTML mensagem formatada em SMTP usando CDONTS