C# 使用HTTP POST附件的PHP邮件
我正在为基于Windows Phone的客户端应用程序开发一个PHP服务。我将通过我的clientWP7调用该服务,我希望该服务还发送作为电子邮件一部分发送的任何附件。因此,我使用HTTP POST,在我的PHP中设置$to、$message、$subject和$,并对我的附件使用相同的逻辑。调用该服务后,我也会在邮箱中收到电子邮件,但附件已损坏。附件通常包含垃圾值。 这是我的PHP代码C# 使用HTTP POST附件的PHP邮件,c#,php,windows-phone-7,post,httpwebrequest,C#,Php,Windows Phone 7,Post,Httpwebrequest,我正在为基于Windows Phone的客户端应用程序开发一个PHP服务。我将通过我的clientWP7调用该服务,我希望该服务还发送作为电子邮件一部分发送的任何附件。因此,我使用HTTP POST,在我的PHP中设置$to、$message、$subject和$,并对我的附件使用相同的逻辑。调用该服务后,我也会在邮箱中收到电子邮件,但附件已损坏。附件通常包含垃圾值。 这是我的PHP代码 $filenames = $_POST['attachment']; $to = $_POST['to'
$filenames = $_POST['attachment'];
$to = $_POST['to'];
$subject = $_POST['subject'];
$messageTxt = $_POST['message'];
$headers = "From: " . $_POST['from'];
$attachmentName = $_POST['attachmentName'];
$rand_seed = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$rand_seed}x";
$headers .= " \r\nMIME-Version: 1.0\r\n"
."Content-Type: multipart/mixed;\r\n"
." boundary=\"{$mime_boundary}\"\r\n";
$message .= "This is a multi-part message in MIME format.\n\n"
."--{$mime_boundary}\n\n"
. $messageTxt . "\n\n";
$message .= "--{$mime_boundary}\n";
$data = $filenames;
$message .= "Content-Type: {\"application/octet-stream\"};\n"
." name=\"$attachmentName\"\n"
."Content-Disposition: attachment;\n" . " filename=\"$attachmentName\"\n"
."Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
$message .= "--{$mime_boundary}\n";
$mail_sent = @mail( $to, $subject, $message, $headers );
echo $mail_sent ? "Mail sent" : "Mail failed";
在客户端,我使用以下代码->
var to = "xyz@gmail.com";
var from = "xyz@gmail.com";
var subj = "Hey";
var msg = "Oh yeah!";
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
sw.Write("Hi there!");
sw.Flush();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://rushabhgosar.com/api/email/v3/index.php");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string postData = String.Format("to={0}&from={1}&subject={2}&message={3}&attachment={4}&attachmentName={5}", to, from, subj, msg, Convert.ToBase64String(ms.GetBuffer()), "1.txt");
try
{
request.BeginGetRequestStream
(result =>
{
try
{
// Sending the request.
using (var requestStream = request.EndGetRequestStream(result))
{
using (StreamWriter writer = new StreamWriter(requestStream))
{
writer.Write(postData);
writer.Flush();
}
}
}
catch
(Exception e) { }
// Getting the response.
request.BeginGetResponse(responseResult =>
{
try
{
var webResponse = request.EndGetResponse(responseResult);
using (var responseStream = webResponse.GetResponseStream())
{
using (var streamReader = new StreamReader(responseStream))
{
string srresult = streamReader.ReadToEnd();
}
}
}
catch (Exception e) {
}
}, null);
}, null);
}
catch (Exception e)
{
}
}
我在带有垃圾值的邮箱上的附件是->内引号
你好!�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
我已经看过了,还有其他一些地方。但是什么也找不到。
这是我在PHPMailer中使用的代码,不起作用:
需要一次“/class.phpmailer.php”
function MailPHPMail()
{
$mailer = new PHPMailer();
$mailer->AddAttachment($_POST['attachment'], $_POST['attachmentName']);
$encoding = 'base64';
$mailer->AddStringAttachment($_POST['attachment'], $_POST['attachmentName'], $encoding, 'image/png');
$to = $_POST['to'];
$subject = $_POST['subject'];
$messageTxt = $_POST['message'];
$mailer->AddAddress($to);
$mailer->SetFrom($from);
$mailer->Subject = $subject;
$mailer->MsgHTML($messageTxt);
$mailer->Send();
}
你看了PHPMailer的课。但是,你试过了吗?我关心的是使用HTTP POST发送附件。PHPMailer的文档说明有一个AddAttachment$path,$name函数,它接受$path,而不是值$\u POST['attachment']。如果我错了,请更正。是的,它采用您的文件路径。但据我所知,你不能只是将文件发布到服务器上。是否所有文件都是这样?或者我可以用它来制作图像文件。i、 e.仅限特定类型?因为如果我能够使用HTTPPOST上传文件并使用PHP将其保存在MySQL中,我认为这应该是可能的。没有HTML。只有PHP和C之间的通信。我不需要一个花哨的UI,而且这个页面不会公开,所以只使用PHP