используете ли вы конфигурацию SMTP для отправки своей электронной почты? попробуйте вместо этого использовать phpmailer. вы можете загрузить библиотеку из https://github.com/PHPMailer/PHPMailer . Я создал электронную почту, отправив этот путь:
function send_mail($email, $recipient_name, $message='')
{
require("phpmailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->CharSet="utf-8";
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "mail.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "myusername"; // SMTP username
$mail->Password = "p@ssw0rd"; // SMTP password
$mail->From = "me@walalang.com";
$mail->FromName = "System-Ad";
$mail->AddAddress($email, $recipient_name);
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->IsHTML(true); // set email format to HTML (true) or plain text (false)
$mail->Subject = "This is a Sampleenter code here Email";
$mail->Body = $message;
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
$mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
$mail->addAttachment('files/file.xlsx');
if(!$mail->Send())
{
echo "Message could not be sent. ";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
}
В вашем коде есть признаки того, что вы, возможно, использовали учебник Linux при создании кода для OS / X (BSD). Linux и OS / X отличаются соглашениями SYSCALL . В 32-битных программах OS / X для int 0x80
требуются параметры (за исключением того, что syscall в EAX ) передается в стеке.
Важные вещи, о которых нужно знать с помощью 32 -бит SYSCALL s через int 0x80
в OS / X:
blockquote>
- аргументы, переданные в стек, нажатые справа налево
- вы должны выделить дополнительные 4 байта ( DWORD ) в стеке после того, как вы нажмете все аргументы
- номер syscall в регистре eax
- вызов прерыванием 0x80
После нажатия аргументов в стеке в обратном порядке для
int 0x80
вы должны выделить дополнительные 4 байта ( DWORD ), в стеке. Значение в этой ячейке памяти в стеке не имеет значения. Это требование является артефактом из старого соглашения UNIX .Список номеров SYSCALL и их параметров можно найти в APPLE файлы заголовков . Вам понадобятся эти SYSCALL s:
blockquote>1 AUE_EXIT ALL { void exit(int rval); } 3 AUE_NULL ALL { user_ssize_t read(int fd, user_addr_t cbuf, user_size_t nbyte); } 4 AUE_NULL ALL { user_ssize_t write(int fd, user_addr_t cbuf, user_size_t nbyte); }
Я прокомментировал некоторый пример кода, который будет похож по функциональности на то, что вы, возможно, были пытающихся достичь:
section .data ;New line string NEWLINE: db 0xa, 0xd LENGTH: equ $-NEWLINE section .bss INPT: resd 1 global _start section .text _start: and esp, -16 ; Make sure stack is 16 byte aligned at program start ; not necessary in this example since we don't call ; external functions that conform to the OS/X 32-bit ABI push dword 1 ; Read 1 character push dword INPT ; Input buffer push dword 0 ; Standard input = FD 0 mov eax, 3 ; syscall sys_read sub esp, 4 ; Extra 4 bytes on stack needed by int 0x80 int 0x80 add esp, 16 ; Restore stack push dword 1 ; Print 1 character push dword INPT ; Output buffer = buffer we read characters into push dword 1 ; Standard output = FD 1 mov eax, 4 ; syscall sys_write sub esp, 4 ; Extra 4 bytes on stack needed by int 0x80 int 0x80 add esp, 16 ; Restore stack push dword LENGTH ; Number of characters to write push dword NEWLINE ; Write the data in the NEWLINE string push dword 1 ; Standard output = FD 1 mov eax, 4 ; syscall sys_write sub esp, 4 ; Extra 4 bytes on stack needed by int 0x80 int 0x80 add esp, 16 ; Restore stack push dword 0 ; Return value from program = 0 mov eax, 1 ; syscall sys_exit sub esp, 4 ; Extra 4 bytes on stack needed by int 0x80 int 0x80
and esp, -16
необходимо, только если вам нужно выровнять стек с 16-байтовой границей в качестве базовой линии для будущих операций стека. Если вы намереваетесь вызывать внешние функции, которые соответствуют OS / X 32-битовому ABI , ожидается, что стек будет выровнен по 16 байт непосредственно перед функцией CALL . Это выравнивание не требуется для системных вызовов черезint 0x80
.Вы должны иметь возможность собирать и связывать его с:
nasm -f macho32 test.asm -o test.o ld -macosx_version_min 10.9.0 -o test test.o -e _start -lSystem
И запустите его с помощью:
./test