从 Fast Reports 使用 TfrxMailExport
Using TfrxMailExport from Fast Reports
我在 Delphi 中使用快速报告时遇到问题,
我使用的对象是 TfrxMailExport,
我面临的问题是电子邮件服务器的值未正确填充。
代码:
email := TfrxMailExport.Create(self);
email.Subject := 'Teste';
email.Lines.Clear;
email.Lines.Add('Linha 1');
email.Lines.Add('Linha 2');
email.Lines.Add('Linha 3');
email.Lines.Add('Linha 4');
email.Address := 'email@email.com';
email.SmtpHost := '0.0.0.0';
email.SmtpPort := 25;
email.FromMail := 'email.email@email.com';
email.FromName := 'NAME';
email.Login := 'Login';
email.Password := 'Password';
email.TimeOut := 30;
email.Report := Rela;
rela.Export(email);
email.Destroy;
Only the E-Mail side gets filled
由于 post 不太可能得到答案(如果有的话),我将 post 我的解决方法作为解决方案,以防有人遇到同样的问题。
我创建了一个类似于 Fast Reports 中的表格,我将 FR 文件导出为 PDF,这个工作正常。
Procedure SomeProc();
var pdf : TfrxPDFExport;
begin
pdf := TfrxPDFExport.Create(self);
pdf.Compressed := True;
pdf.EmbeddedFonts := False;
pdf.Background := True;
pdf.PrintOptimized := False;
pdf.Outline := False;
pdf.Transparency := False;
pdf.Quality := 95;
pdf.ProtectionFlags := [eModify, eCopy, eAnnot];
pdf.OpenAfterExport := False;
pdf.ShowProgress := False;
pdf.ShowDialog := false;
pdf.FileName := 'C:\SomeFolder\'+fileName+'.pdf';
pdf.HideToolbar := False;
pdf.HideMenubar := False;
pdf.HideWindowUI := False;
pdf.FitWindow := False;
pdf.CenterWindow := False;
pdf.PrintScaling := False;
myReport.Export(pdf);
end;
然后对于电子邮件,我使用了 C# .Net DLL,并从 Delphi 应用程序调用它。
C#代码:
using RGiesecke.DllExport;
[DllExport("SendEmail", CallingConvention = CallingConvention.StdCall)]
public static string SendEmail(string txtTo, string txtToCC, string txtToBCC, string txtSubject, string txtMessage, string txtFrom, string txtServer, string txtPort, string txtUtilizador, string txtPasse, string txtFile ,bool cbSSL)
{
MailMessage message = new MailMessage();
SmtpClient smtpClient = new SmtpClient();
string msg = string.Empty;
try
{
MailAddress fromAddress = new MailAddress(txtFrom);
Attachment attachment = new Attachment(txtFile, System.Net.Mime.MediaTypeNames.Application.Pdf);
message.From = fromAddress;
message.To.Add(txtTo);
if (txtToCC != "")
message.CC.Add(txtToCC);
if (txtToBCC != "")
message.Bcc.Add(txtToBCC);
message.Attachments.Add(attachment);
message.Subject = txtSubject;
message.IsBodyHtml = true;
message.Body = txtMessage;
smtpClient.Timeout = 5000;
smtpClient.Host = txtServer;
int.TryParse(txtPort, out int port);
smtpClient.Port = port;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential(txtUtilizador, txtPasse);
smtpClient.EnableSsl = cbSSL;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.Send(message);
message.Dispose();
return "Message Sent.";
}
catch (Exception ex)
{
return ex.Message;
}
}
最后,在 Delphi 中调用它。
function SendEmail(txtTo, txtToCC, txtToBCC, txtSubject, txtMessage, txtFrom, txtServer, txtPort, txtUtilizador, txtPasse, txtFicheiro : PAnsiChar; cbSSL : Boolean) : PAnsiChar; stdcall; external 'SendEmail.dll';
showmessage(SendEmail(PAnsiChar(AnsiString('To'))
, PAnsiChar(AnsiString('ToCC'))
, PAnsiChar(AnsiString('ToBCC'))
, PAnsiChar(AnsiString('Subject'))
, PAnsiChar(AnsiString('Message'))
, PAnsiChar(AnsiString('From'))
, PAnsiChar(AnsiString('Server'))
, PAnsiChar(AnsiString('Port'))
, PAnsiChar(AnsiString('User'))
, PAnsiChar(AnsiString('Pass'))
, PAnsiChar(AnsiString('File'))
, SSL));
我犯了几个错误,比如使用一个函数来转换字符串而不必编写每个字符串,由于某种原因它不起作用。
该函数需要指定它是一个标准调用。
我在 Delphi 中使用快速报告时遇到问题, 我使用的对象是 TfrxMailExport, 我面临的问题是电子邮件服务器的值未正确填充。
代码:
email := TfrxMailExport.Create(self);
email.Subject := 'Teste';
email.Lines.Clear;
email.Lines.Add('Linha 1');
email.Lines.Add('Linha 2');
email.Lines.Add('Linha 3');
email.Lines.Add('Linha 4');
email.Address := 'email@email.com';
email.SmtpHost := '0.0.0.0';
email.SmtpPort := 25;
email.FromMail := 'email.email@email.com';
email.FromName := 'NAME';
email.Login := 'Login';
email.Password := 'Password';
email.TimeOut := 30;
email.Report := Rela;
rela.Export(email);
email.Destroy;
Only the E-Mail side gets filled
由于 post 不太可能得到答案(如果有的话),我将 post 我的解决方法作为解决方案,以防有人遇到同样的问题。
我创建了一个类似于 Fast Reports 中的表格,我将 FR 文件导出为 PDF,这个工作正常。
Procedure SomeProc();
var pdf : TfrxPDFExport;
begin
pdf := TfrxPDFExport.Create(self);
pdf.Compressed := True;
pdf.EmbeddedFonts := False;
pdf.Background := True;
pdf.PrintOptimized := False;
pdf.Outline := False;
pdf.Transparency := False;
pdf.Quality := 95;
pdf.ProtectionFlags := [eModify, eCopy, eAnnot];
pdf.OpenAfterExport := False;
pdf.ShowProgress := False;
pdf.ShowDialog := false;
pdf.FileName := 'C:\SomeFolder\'+fileName+'.pdf';
pdf.HideToolbar := False;
pdf.HideMenubar := False;
pdf.HideWindowUI := False;
pdf.FitWindow := False;
pdf.CenterWindow := False;
pdf.PrintScaling := False;
myReport.Export(pdf);
end;
然后对于电子邮件,我使用了 C# .Net DLL,并从 Delphi 应用程序调用它。
C#代码:
using RGiesecke.DllExport;
[DllExport("SendEmail", CallingConvention = CallingConvention.StdCall)]
public static string SendEmail(string txtTo, string txtToCC, string txtToBCC, string txtSubject, string txtMessage, string txtFrom, string txtServer, string txtPort, string txtUtilizador, string txtPasse, string txtFile ,bool cbSSL)
{
MailMessage message = new MailMessage();
SmtpClient smtpClient = new SmtpClient();
string msg = string.Empty;
try
{
MailAddress fromAddress = new MailAddress(txtFrom);
Attachment attachment = new Attachment(txtFile, System.Net.Mime.MediaTypeNames.Application.Pdf);
message.From = fromAddress;
message.To.Add(txtTo);
if (txtToCC != "")
message.CC.Add(txtToCC);
if (txtToBCC != "")
message.Bcc.Add(txtToBCC);
message.Attachments.Add(attachment);
message.Subject = txtSubject;
message.IsBodyHtml = true;
message.Body = txtMessage;
smtpClient.Timeout = 5000;
smtpClient.Host = txtServer;
int.TryParse(txtPort, out int port);
smtpClient.Port = port;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential(txtUtilizador, txtPasse);
smtpClient.EnableSsl = cbSSL;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.Send(message);
message.Dispose();
return "Message Sent.";
}
catch (Exception ex)
{
return ex.Message;
}
}
最后,在 Delphi 中调用它。
function SendEmail(txtTo, txtToCC, txtToBCC, txtSubject, txtMessage, txtFrom, txtServer, txtPort, txtUtilizador, txtPasse, txtFicheiro : PAnsiChar; cbSSL : Boolean) : PAnsiChar; stdcall; external 'SendEmail.dll';
showmessage(SendEmail(PAnsiChar(AnsiString('To'))
, PAnsiChar(AnsiString('ToCC'))
, PAnsiChar(AnsiString('ToBCC'))
, PAnsiChar(AnsiString('Subject'))
, PAnsiChar(AnsiString('Message'))
, PAnsiChar(AnsiString('From'))
, PAnsiChar(AnsiString('Server'))
, PAnsiChar(AnsiString('Port'))
, PAnsiChar(AnsiString('User'))
, PAnsiChar(AnsiString('Pass'))
, PAnsiChar(AnsiString('File'))
, SSL));
我犯了几个错误,比如使用一个函数来转换字符串而不必编写每个字符串,由于某种原因它不起作用。 该函数需要指定它是一个标准调用。