$v) $data[$k] = trim($v); // Check required fields $missing = array_filter($required, fn($f) => empty($data[$f] ?? '')); if ($missing) { showError( 'Missing required fields: ' . implode(', ', $missing) . '. Remember: you must click Sign Message on the Digital Signature tab before sending.' ); } // Limit newsgroups to 3 $groups = array_slice( array_filter(array_map('trim', explode(',', $data['newsgroups']))), 0, 3 ); $data['newsgroups'] = implode(', ', $groups); // Build raw email $hdr = []; $hdr[] = 'From: ' . $data['from']; $hdr[] = 'To: mail2news@localhost'; // dummy for sendmail -t $hdr[] = 'Newsgroups: ' . $data['newsgroups']; $hdr[] = 'Subject: ' . $data['subject']; if (!empty($data['references'])) $hdr[] = 'References: ' . $data['references']; $hdr[] = 'X-Hashcash: ' . $data['xhashcash']; $hdr[] = 'X-Ed25519-Sig: ' . $data['x-ed25519-sig']; if (!empty($data['x-ed25519-pub'])) { $hdr[] = 'X-Ed25519-Pub: ' . $data['x-ed25519-pub']; } $hdr[] = 'X-No-Archive: Yes'; $hdr[] = 'Mime-Version: 1.0'; $hdr[] = 'Content-Type: text/plain; charset=UTF-8'; $hdr[] = 'Content-Transfer-Encoding: 7bit'; $hdr[] = ''; // blank line before body $raw = implode("\r\n", $hdr) . "\r\n" . $data['message'] . "\r\n"; // Send via sendmail using the custom transport $sendmail = '/usr/sbin/sendmail'; $cmd = escapeshellcmd($sendmail) . ' -i -oTransport=mail2news -t'; $descriptors = [ 0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w'], ]; $proc = proc_open($cmd, $descriptors, $pipes); if (!is_resource($proc)) showError('Failed to invoke sendmail.'); fwrite($pipes[0], $raw); fclose($pipes[0]); $stderr = stream_get_contents($pipes[2]); fclose($pipes[1]); fclose($pipes[2]); $code = proc_close($proc); if ($code !== 0) { showError('Sendmail error (code ' . $code . '):
' . nl2br(htmlspecialchars($stderr))); } // ------------------ success page ------------------ ?> Post Sent

Message Sent Successfully

Your article was handed off to mail2news and should appear in the newsgroups soon.

Return to Home Error

Submission Error

Return to Home