Tôi có một yêu cầu rất cụ thể. Trong ứng dụng web của tôi, tôi phải tạo ra một hóa đơn pdf từ các giá trị cơ sở dữ liệu, và một cơ thể email. Tôi có thể dễ dàng gửi điều này bằng cách sử dụng SMTP hoạt động hoàn hảo.Đính kèm pdf được tạo tự động vào email trong ứng dụng asp.net
Nhưng, vấn đề là chúng tôi không thể dựa vào hệ thống để luôn hoàn hảo và đây là một hóa đơn. Vì vậy, chúng ta cần mở ứng dụng thư mặc định thay vì sử dụng SMTP. Ngay bây giờ, tôi có mã sau đây
//Code to create the script for email
string emailJS = "";
emailJS += "window.open('mailto:[email protected]?body=Test Mail" + "&attachment=" + emailAttachment + "');";
//Register the script for post back
ClientScript.RegisterStartupScript(this.GetType(), "mailTo", emailJS, true);
Điều này mở email hoàn toàn, nhưng không có tệp đính kèm nào hoạt động. Đường dẫn được cho là /Web/Temp/123.pdf
.
Nếu tôi sử dụng cùng một đường dẫn như url bình thường như dưới đây, nó sẽ mở tệp trong cửa sổ mới chính xác.
ClientScript.RegisterStartupScript(this.GetType(), "newWindow", "window.open('/Web/Temp/123.pdf');", true);
Vì vậy, tệp rõ ràng tồn tại, nhưng nó tồn tại trên máy chủ. Outlook mặt khác mở trên máy khách. Vì vậy, tôi không thể sử dụng đường dẫn được xác định đầy đủ như C:\Web\Temp\123.pdf
. Nếu tôi thử điều đó, nó sẽ cố gắng tìm tệp trên máy khách, nơi thư mục có thể không tồn tại.
Tôi đang cố gắng tìm ra những gì tôi có thể làm ở đây. Nếu có một phương pháp khác tôi nên thử.
P.S. Không, tôi không thể gửi email trực tiếp. Điều đó sẽ gây ra nhiều vấn đề hơn trong tương lai cho tôi.
Chỉnh sửa: Tôi cũng tìm thấy một vấn đề lạ. Nếu tôi thêm dấu ngoặc kép vào đường dẫn tệp trong tệp đính kèm, \ được thêm tự động. @"&attachment=""" + Server.MapPath(emailAttachment) + @"""');"
cho tôi kết quả là &attachment=\"C:\Web\Temp\123.pdf\"
.
Tôi đang cố gắng thoát khỏi dấu ngoặc kép đó và bằng cách nào đó nó thêm dấu gạch chéo. Tôi biết đây là một vấn đề hoàn toàn khác, nhưng tôi nên đề cập đến ở đây, thay vì tạo ra một câu hỏi mới.
Chỉnh sửa: Tôi đã thử một đường dẫn cố định trên máy chủ cục bộ. Vì vậy, về cơ bản tôi đang thử nghiệm ứng dụng trên cùng một máy nơi tệp được lưu trữ. vẫn không có chấp trước.
string emailJS = "";
emailJS += @"window.open('mailto:[email protected]?body=Test Mail" + emailAttachment + @"&attachment=";
emailJS += @"""D:\Dev\CSMS\CSMSWeb\Temp\635966781817446275.Pdf""');";
//emailJS += Server.MapPath(emailAttachment) + @"');";
//Register the script for post back
ClientScript.RegisterStartupScript(this.GetType(), "mailTo", emailJS, true);
Đã cập nhật đường dẫn để đảm bảo nó phù hợp. Bây giờ, nó chỉ ném lỗi nói rằng command line argument not valid
.
Chỉnh sửa:
Tôi có thể thử phương pháp nào khác không? Tôi có đường dẫn tệp ở phía máy chủ. Có lẽ tôi có thể tải tập tin tự động về một số thư mục mặc định trên máy khách và mở từ đó? Điều đó có thể không?
Chỉnh sửa: Tôi đã thử một tùy chọn khác.
emailJS += @"mailto:[email protected]?body=Test Mail" + @"&attachment=";
emailJS += @"\\localhost\CSMSWeb\Temp\635966781817446275.Pdf";
//emailJS += Server.MapPath(emailAttachment) + @"');";
Process.Start(emailJS);
Dòng Process.Start
hoạt động nhưng không có gì cả. Không có quy trình nào bắt đầu, cũng không có lỗi.
Chỉnh sửa: yay. Cuối cùng, tôi đã cho phép người dùng phê duyệt bằng cách sử dụng biểu mẫu riêng để hiển thị chủ đề và nội dung, thay vì mở ứng dụng thư khách mặc định. mặc dù, tôi vẫn muốn giải quyết vấn đề này như hiện nay.
Is ứng dụng interanet này bạn đang làm việc trên? Nếu vậy, nó có thể được thực hiện với một số hạn chế, nếu không nó không thể. – Andrei
Có, ứng dụng mạng nội bộ. – jitendragarg