Mail and External Services
@Mail — email
@Mail.SimpleMessage — plain text email
ZYMBA
$msg = new @Mail.SimpleMessage();
$msg.setTo("[email protected]");
$msg.setFrom("[email protected]");
$msg.setSubject("Welcome!");
$msg.setBody("Hello, welcome to our platform.");
$msg.setReplyTo("[email protected]");
@ZeyOS.queueMail($msg);
@Mail.MultipartMessage — HTML email with attachments
ZYMBA
$msg = new @Mail.MultipartMessage();
$msg.setTo("[email protected]");
$msg.setSubject("Your Report");
$msg.setHTMLBody("<h1>Report</h1><p>See attachment.</p>");
$msg.setTextBody("Report - see attachment.");
$msg.addAttachment("/path/to/report.pdf", "report.pdf", "application/pdf");
$msg.addAttachment($csvData, "data.csv", "text/csv");
@ZeyOS.queueMail($msg);
@FTP.Client — FTP operations (30 methods)
ZYMBA
$ftp = new @FTP.Client();
$ftp.connect("ftp.example.com", 21);
$ftp.login("user", "password");
// Download
$content = $ftp.get("/remote/file.txt");
$ftp.download("/remote/file.txt", "/local/file.txt");
// Upload
$ftp.put("/remote/file.txt", $content);
$ftp.upload("/local/file.txt", "/remote/file.txt");
// Directory operations
$files = $ftp.listFiles("/remote/dir");
$ftp.createDirectory("/remote/newdir");
$ftp.deleteFile("/remote/old.txt");
$ftp.close();
@REST.Client — REST API client (6 methods)
ZYMBA
$client = new @REST.Client("https://api.example.com");
$response = $client.get("/users");
$response = $client.post("/users", [name: "Alice"]);
$response = $client.put("/users/1", [name: "Alice Updated"]);
$response = $client.delete("/users/1");
@SOAP.Client — SOAP web service client (8 methods)
ZYMBA
$client = new @SOAP.Client("https://service.example.com/api?wsdl");
$result = $client.call("GetUser", [userId: 123]);
echo $result.name;
@ZIP.Archive — ZIP file manipulation (30 methods)
ZYMBA
$zip = new @ZIP.Archive();
// Create a new archive
$zip.open("/path/to/archive.zip", @ZIP.Archive.CREATE);
$zip.addFile("/path/to/file.txt", "file.txt");
$zip.addString("Hello World", "hello.txt");
$zip.close();
// Read an existing archive
$zip.open("/path/to/archive.zip");
$content = $zip.readFile("hello.txt");
$files = $zip.listFiles();
$zip.extractAll("/path/to/output");
$zip.close();
Practical patterns
Complete API service handler
ZYMBA
include 'zymba:sql,var,http';
// Guard clauses
unless (@HTTP.getRequestMethod() == "POST") {
@HTTP.setStatusCode(405);
echo @Var.toJSON([error: "Method not allowed"]);
return;
}
// Parse input
$input = @HTTP.getRequestBody();
$data = null;
try {
$data = @Var.fromJSON($input);
} catch ($e) {
@HTTP.setStatusCode(400);
echo @Var.toJSON([error: "Invalid JSON"]);
return;
}
// Database operations
$db = @ZeyOS.selectDatabase();
with ($db.selectTransaction()) {
$contact = new @ZeyOS.Object("contacts");
$contact.setFields([
name: $data.name,
email: $data.email,
status: 1
]);
$contact.save();
$tags = $contact.selectTags();
$tags.addTags($data.tags ?? []);
}
@HTTP.setHeader("Content-Type", "application/json");
echo @Var.toJSON([success: true, id: $contact.getID()]);
Batch import with transaction
ZYMBA
include 'zymba:sql,var';
$db = @ZeyOS.selectDatabase();
$imported = 0;
$errors = [];
with (new @ZeyOS.TransactionContext) {
for ($records as $record) {
try {
$obj = new @ZeyOS.Object("contacts");
$obj.setFields($record);
$obj.save();
$imported++;
} catch ($e) {
$errors[] = [record: $record, error: $e.getMessage()];
}
}
}
echo @Var.toJSON([imported: $imported, errors: $errors]);