E-posta iş akışı entegrasyonları ve SDK'lar
E-posta analizi, ayrı olarak ücretlendirilen yapay zeka yeniden yazımları ve tasarım araçları için SendRepute API'larını ve entegrasyonlarını keşfedin. Merkezi analiz, yeniden yazım ve oluşturucu uç noktaları e-posta göndermez; kasten etkinleştirilen Kampanyalar teslimatı ve belirli sağlayıcı adaptörleri yapılandırılmış sağlayıcınızı kullanarak gönderim yapabilir. Hiçbir sonuç gelen kutusuna yerleşme garantisi vermez.
Node.js paketi npm üzerinden temin edilebilir. Diğer entegrasyonlar buradan indirilebilir veya doğrulanmış bir genel GitHub deposundan yüklenebilir. Bir entegrasyon seçin, rehberini takip edin ve etkinleştirmeden önce izinleri, güncel fiyatlandırmayı ve hata ayarlarını gözden geçirin.
Mevcut e-posta iş akışınızı koruyun. Bu merkezi API örnekleri yalnızca içeriği analiz eder, yeniden yazar veya oluşturur; asla e-posta göndermez. Ayrı olarak, kasıtlı olarak etkinleştirilmiş Kampanyalar gönderimi ve belirli sağlayıcı bağdaştırıcıları, yapılandırılmış sağlayıcınız üzerinden gönderim yapabilir. Kurulumu, yapılandırması, örnekleri ve çalışma sınırları için bir araç seçin. Örnekler bu sayfada çalışmaz; ücretli işlemleri ve gönderim eylemlerini ayrı olarak inceleyin.
WordPress eklentisi
0.2.0
WordPress 5.7+, PHP 7.4+ ve OpenSSL gerektirir. ZIP dosyasını Eklentiler > Yeni Ekle > Eklenti Yükle aracılığıyla yükleyin, ardından Ayarlar > SendRepute sayfasını açın. Her sitenin token'ını ve ücretli analiz onayını ayrı ayrı yapılandırın. Yüklü yaşam döngüsü kanıtları, WooCommerce 10.4.3 ile WordPress 6.8.3'ü kapsar; ayrı SMTP eklentisi kanıtları ise WP Mail SMTP 4.9.0 ve FluentSMTP 2.4.0 ile WordPress 7.1.2 sürümünü kapsar.
Mesajları SMTP'yi değiştirmeden veya mesajları yeniden yazmadan pre_wp_mail üzerinden kontrol eder. Danışma modu gönderime izin verir; engelleme modu bir olasılık eşiği uygular. API hata politikası ayrıca yapılandırılır. wp_mail fonksiyonunu devre dışı bırakan eklentiler kapsama dahil değildir; daha sonraki taşıma değişiklikleri analiz edilmez. Engelleme işlemi mesajları kuyruğa almaz.
Analiz varsayılan olarak devre dışıdır. Kapsamı belirlenmiş bir müşteri token'ı yapılandırın, ücretsiz bağlantı kontrolünü çalıştırın, fiyatlandırmayı inceleyin ve ücretli analizi etkinleştirmeden önce açıkça onay verin. Manuel AI işlemleri ayrı onay gerektirir.
WordPress ZIP dosyasını indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Bu komutları WP-CLI'nin mevcut olduğu WordPress dizininden çalıştırın veya indirilen ZIP dosyasını Eklentiler > Yeni Ekle > Eklenti Yükle aracılığıyla yükleyip etkinleştirin. Ayarlar > SendRepute sayfasını açın. Çoklu site (multisite) üzerinde her siteyi ayrı ayrı yapılandırın ve etkinleştirin. Desteklenen bir WordPress/PHP kombinasyonu kullanın; minimum sürüm, ömrünü tamamlamış yazılımların çalıştırılması için bir öneri değildir.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-wp.zip
wp plugin install ./sendrepute-wp.zip --activate
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-wordpress.git
cd sendrepute-wordpress
python3 package.py
2. Güvenli şekilde yapılandırın
classify, account:read ve catalog:read kapsamlarına, son kullanma tarihine ve harcama limitlerine sahip bir sunucu tarafı müşteri belirteci oluşturun. Bunu ayarlara girin veya gösterildiği gibi sunucu gizli anahtar deposundan SENDREPUTE_API_TOKEN yükleyin. Saklanan belirteçler, WordPress tuzları (salts) ve OpenSSL ile kimlik doğrulamalı şifreleme kullanır; tuz rotasyonundan sonra bunları yeniden girin. Ücretli olmayan bağlantı kontrolünü çalıştırın, sınıflandırma fiyatlandırmasını gözden geçirin, ardından otomatik analizi açıkça etkinleştirin. Danışma/engelleme modunu, eşiği ve bağımsız fail-open/fail-closed politikasını ayarlayın.
// wp-config.php — optional server-secret alternative to settings storage.
$sendreputeToken = getenv('SENDREPUTE_API_TOKEN');
if (is_string($sendreputeToken) && $sendreputeToken !== '') {
define('SENDREPUTE_API_TOKEN', $sendreputeToken);
}
3. Bilinçli şekilde kullanın
Aşağıdaki işlev normal wp_mail kullanır ve yalnızca uygulamanız çağırdığında gönderim yapar. Ücretli analiz etkinleştirildiğinde, eklenti pre_wp_mail aşamasında analiz yapar ve ardından mevcut iletim yoluna izin verir veya engeller. Kendi yetkili alıcınızı sağlayın; önce aktarım yapmayan yerel bir posta havuzuna karşı test edin. Yanlış (false) sonuç, çağıranın reddedilen gönderimi yönetmesi gerektiği anlamına gelir; kuyruğa alınmaz.
// Call deliberately: this sends through your existing WordPress transport.
function sendrepute_reviewed_message($recipient) {
return wp_mail(
$recipient,
'Your requested account summary',
'Here is the account summary you requested.'
);
}
Başka neler yapabilir?
Ayarlar ayrıca ayrı ücretli onay gerektiren manuel AI yeniden yazma ve şablon oluşturma eylemleri sunar. Fiyat gösterimi için vip:read; yeniden yazma için rewrite; oluşturma için ai:generate ve VIP oluşturma için aktif VIP üyeliği gerekir. Sonuçlar kaçış karakterleri uygulanmış, yalnızca kopyalanabilir metinlerdir: asla otomatik olarak uygulanmaz veya gönderilmez. Mevcut belirteçler otomatik olarak yeni kapsamlar kazanmaz.
Sonuçlar, hatalar ve limitler
Advisory teslimata izin verir; engelleme ise sonlu spamProbability değerini eşiğinizle karşılaştırır. API zaman aşımları ve hataları, bir spam etiketi yerine ayrı hata politikasını izler. Opak yerel kilitler, 24 saat boyunca tekrarlanan analizleri engeller; bilinmeyen ağ sonuçları otomatik olarak yeniden denenmez. Gönderimlerin kendileri tekilleştirilmez. Kurulu güncelleme kontrolleri, 0.2.0'a yükseltilen izlenen bir 0.1.0 ZIP dosyasını, yönetici nonce reddini/kaydını ve seçilen WooCommerce yolunu kapsamıştır. Ayrı bir 40 senaryoluk matris, To/Cc/Bcc, Reply-To, başlıklar, ekler, SMTP reddi ve politika sonuçları dahil olmak üzere hem WP Mail SMTP hem de FluentSMTP ile eklenti yükleme sıralarını kapsamıştır. Bu tam demetler diğer CMS, SMTP eklentisi veya sağlayıcı sürümlerini onaylamaz. wp_mail işlevini atlayan kancalar ve sonraki taşıma değişiklikleri kapsam dışında kalır. Devre dışı bırakma ayarları korur; kaldırma, devre dışı bırakılmış ayarlar tutulsa bile kimlik bilgilerini siler. Bir wp-config belirtecini kendiniz kaldırın.
WooCommerce e-posta bağdaştırıcısı
0.2.0
WordPress eklentisi ile aynı SendRepute 0.2.0 ZIP dosyasına dahildir; ayrı bir WooCommerce eklentisi veya indirmesi yoktur. Eklentinin WordPress 5.7+, PHP 7.4+ ve OpenSSL temel gereksinimlerini gerektirir. Bağdaştırıcı, WooCommerce 10.4.3 sürümüne karşı kaynak incelemesinden geçirilmiştir; her WooCommerce veya posta uzantısı sürümünde sertifikalandırılmamıştır.
WooCommerce analizi, varsayılan olarak kapalı olan kendi yönetici anahtarına ve tam yerleşik e-posta türü seçimlerine sahiptir. Genel analiz ve ücretli onay kontrolleri de açık olmalıdır. Seçilmeyen ve uzantı tanımlı türler analizi atlar. Seçilen her yerleşik customer_* türü korumalıdır ve yalnızca danışma amaçlıdır: analiz edilebilir ancak asla engellenmez. Seçilen çok parçalı postalar, herhangi bir ücretli istekten önce sınıflandırmada başarısız olur; danışma veya açık hata (fail-open) teslimatı korurken, kapalı hata (fail-closed) yalnızca korumasız postaları engeller.
Paylaşılan WordPress ve WooCommerce ZIP dosyasını indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Bu, WordPress kılavuzu tarafından kullanılan yüklenebilir ZIP dosyasının aynısıdır. Bir kez kurun; ikinci bir WooCommerce eklentisi kurmayın. SendRepute eklentisini etkinleştirin, ardından Ayarlar > SendRepute yolunu izleyin. WordPress, WooCommerce, PHP ve gerçek posta taşıyıcısını desteklenen ve güncel durumda tutun.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-wp.zip
wp plugin install ./sendrepute-wp.zip --activate
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-wordpress.git
cd sendrepute-wordpress
python3 package.py
2. Güvenli şekilde yapılandırın
Sunucu sırlarından veya şifrelenmiş WordPress ayarından kapsamlı bir müşteri belirteci kullanın. Önce paylaşılan ücretli olmayan bağlantı kontrolünü, güncel fiyat incelemesini, küresel ücretli onayı, risk modunu, eşiği ve hata politikasını yapılandırın. Ardından WooCommerce analizini ayrıca etkinleştirin ve yalnızca incelediğiniz yerleşik e-posta türlerini seçin. Uzantı tarafından tanımlanan türler hiçbir zaman otomatik olarak seçilmez.
// wp-config.php — keep the shared WordPress/WooCommerce token server-side.
$sendreputeToken = getenv('SENDREPUTE_API_TOKEN');
if (is_string($sendreputeToken) && $sendreputeToken !== '') {
define('SENDREPUTE_API_TOKEN', $sendreputeToken);
}
3. Bilinçli şekilde kullanın
Normal şekilde WooCommerce üzerinden göndermeye devam edin. Adaptör, WooCommerce tarafından halihazırda seçilmiş olan geri çağırmayı (callback) sarmalar ve orijinal argümanlarını ve taşıma yöntemini korur; yeni bir gönderim yöntemi sağlamaz. Başka bir filtre geri çağırma argümanlarını değiştirirse, bu geri çağırma sırasında sıradan posta iç içe geçerse veya özel bir geri çağırma asla wp_mail çağırmazsa, analiz genel ücretli yola düşmek yerine ihtiyatlı bir şekilde atlanır. Seçilen kritik olmayan türleri aktarmasız bir posta havuzuyla test edin.
Sonuçlar, hatalar ve limitler
Seçilen tek parçalı postalar, her customer_* türünün korunduğu ve yalnızca danışma amaçlı olduğu durumlar hariç, paylaşılan WordPress danışma, eşik ve hata politikalarını izler. Korumalı müşteri postaları; yüksek riskli sonuç, API hatası veya desteklenmeyen içerikten sonra her zaman devam eder. WooCommerce, pre_wp_mail sonrasında çok parçalı alternatifler oluşturur, bu nedenle seçilen çok parçalı postalar kısmen sınıflandırılmak yerine herhangi bir ücretli istekten önce başarısız olur; fail-closed ile yalnızca seçilen korumasız postalar reddedilebilir. Başarı, başarısızlık ve iç içe gönderimlerden sonra geri çağırma bağlamı kaldırılır.
Drupal posta arka ucu
0.1.0
Drupal 10.3+ veya 11.x ve PHP 8.1+ gerektirir. ZIP dosyasını bir modül olarak yükleyin, administer sendrepute yetkisini yalnızca güvenilen yöneticilere verin, sınırlı bir adres dışı gönderici görünen adı yapılandırın ve tam modül/anahtar posta yollarını seçin. 0.1.0 sürümü yalnızca Drupal çekirdeği php_mail destekler; bu bir Mail arka ucudur, bir sağlayıcı veya alternatif transport değildir. Kurulu site kanıtları, PHP 8.4.10 ile tam Drupal 10.6.17 ve 11.4.7 sürümlerini kapsar.
Ücretli onay ve her rota varsayılan olarak kapalıdır. Her tam rota, sabit çekirdek php_mail delegesini, danışma veya engelleme modunu, bağımsız bir koruma veya engelleme hata politikasını, eşiği ve bilinçli kritik posta seçimini kullanır. Hesap ve güvenlik postaları, o tam rota açıkça kritik engellemeye izin vermediği sürece iletilebilir kalır. Aynı php_mail örneği tek bir skaler nihai gövdeyi formatlar ve gönderir; çok parçalı ve ek içeren çıktılar desteklenmez.
Drupal ZIP indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Drupal proje kök dizininden çalıştırın veya ZIP dosyasını Drupal'ın modül yükleyicisiyle yükleyin. Arşiv, modules/contrib için uygun bir sendrepute modül kökü içerir. Etkinleştirin, administer sendrepute yetkisini yalnızca güvenilir yöneticilere verin ve Yapılandırma > Sistem > SendRepute yolunu açın.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-drupal.zip
unzip sendrepute-drupal.zip -d modules/contrib
drush en sendrepute -y
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-drupal.git
cd sendrepute-drupal
2. Güvenli şekilde yapılandırın
Sadece classify kapsamlı bir SENDREPUTE_API_TOKEN değerini web/PHP işlem ortamında saklayın. Bu değer form tarafından asla kabul edilmez veya Drupal yapılandırmasında dışa aktarılmaz. Formda, adres, açılı ayraç veya kontrol karakteri içermeyen en fazla 320 baytlık zorunlu bir gönderen görünen adı girin. Gösterildiği gibi tam rota başına yedi alanlı bir satır ekleyin; delege php_mail olmalıdır. advisory/block modunu, preserve/block hata politikasını, eşiği ve kritik evet/hayır seçeneğini belirleyin. advisory, preserve ve no ile başlayın.
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
# Enter a non-address sender display name in Configuration > System > SendRepute.
# One exact route in Configuration > System > SendRepute:
# contact|page_mail|php_mail|advisory|preserve|0.90|no
3. Bilinçli şekilde kullanın
Drupal'ın normal posta yöneticisini çağırmaya devam edin. Kayıt olunmuş bir rota için sendrepute_mail, çekirdek php_mail'in format() metodunu çağırır, bu nihai skaler gövdeyi analiz eder, politikayı uygular ve ardından aynı önbelleğe alınmış php_mail örneğinin mail() metodunu çağırır. Diğer delege kimlikleri reddedilir. hook_mail_alter kullanmaz ve mesajı yeniden yazmaz.
Sonuçlar, hatalar ve limitler
Doğrulanmış bir başarı, yalnızca engelleme modunda yapılandırılan eşikte veya üzerinde engelleme yapar. Tam iç içe geçmiş sınıflandırma sonucu ve faturalandırma yanıtı, spamProbability teslimatı etkilemeden önce doğrulanır. API, kimlik doğrulama, bakiye, hız sınırı, hatalı biçimlendirilmiş, çok parçalı, ek göstergesi ve boyut hataları, korunan kritik postaların devam etmesi haricinde bağımsız rota hata politikasını izler. Kurulu 10.6.17/11.4.7 matrisi, etkinken kurulum ve yerinde ZIP değiştirmeyi, gerçek yönetici girişini, Form API CSRF reddini/kaydını, eklenti keşfini, rota katılımını, sentetik sınıflandırmayı, kritik posta korumasını ve yerel bir havuz üzerinden çekirdek php_mail işlevini kapsamıştır. Temel kaynak kontrolleri ayrıca değişmez 10.3.0 ve 11.0.0 arşivlerini de kapsar; hiçbir sonuç sonraki her yamayı veya katkıda bulunulan mailer modülünü onaylamaz. Yapılandırılmış görünen ad, boş olmayan konu ve uzunluk çerçeveli gövde gönderilir; adresler, alıcılar, başlıklar, parametreler ve ekler hariç tutulur. Konu 998 bayt, gövde ise 256 KiB ile sınırlıdır. Bir adet doğrulanmış HTTPS denemesi yapılır, yönlendirme, yeniden deneme veya kuyruk yoktur.
PrestaShop posta modülü
0.1.1
0.1.1 sürümü, PHP 8.1–8.4 ile tam olarak PrestaShop 9.0.0, 9.0.1, 9.0.2 ve 9.0.3 sürümlerini destekler. ZIP dosyasını Modüller > Modül Yöneticisi kısmından yükleyin, ardından SendRepute e-posta sınıflandırmasını yapılandırın. Dört resmi hazır klasik sürümün tamamı izole kurulum, kimliği doğrulanmış yönetici yapılandırması ve ZIP güncelleme kontrollerinden geçmiştir; bu sürümlerin değiştirilmemiş Mail::send() uygulamaları da çevrimdışı gerçek posta matrisinden geçmiştir. PrestaShop 8, 9.1+ ve listede olmayan sonraki 9.0 yamaları desteklenmemektedir.
Modül, ücretli onay/içerik onayı ve tam şablon seçimi varsayılan olarak kapalıdır. Symfony mesajını yeniden oluşturmadan nihai olarak oluşturulmuş konu satırını ve desteklenen her görüntülenen gövdeyi analiz eder. Hem text/plain hem de text/html içeren bir mesaj, tek bir sınırlı sınıflandırma isteğinde gönderilir: düz metin alternatifi etkisiz hale getirilir, orijinal HTML korunur ve servis, her türdeki alternatifi birleştirmeden bağımsız olarak analiz eder. Sonuç, tam içerik denetimleriyle birlikte en yüksek riski kullanır, bir adet ücretli sınıflandırma üretir ve asla kısmi bir güvenlik puanı döndürmez. Danışma asla gönderimi kesintiye uğratmaz. Eşik engelleme ve kapalı hata (fail-closed), hem Symfony Mailer'ın ExceptionInterface hem de PrestaShop'un ModuleErrorInterface arayüzlerini uygulayan bir istisna fırlatır; desteklenen her sürümde, kurulu test Mail::send() fonksiyonunun SMTP teslimatı olmadan false döndürdüğünü gözlemlemiştir. Hata politikası risk eşiğinden bağımsızdır.
PrestaShop ZIP indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
0.1.1 ZIP dosyasını indirin, ardından Modüller > Modül Yöneticisi > Bir modül yükle seçeneğini kullanarak dosyayı seçin. SendRepute e-posta sınıflandırması için Yapılandır'ı açın. Tam olarak PrestaShop 9.0.0–9.0.3 aralığı dışındaki sürümlere kurulumu zorlamayın: iptal ve imzalama davranışı denetlenen Mail::send() yollarına bağlıdır.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-prestashop.zip
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-prestashop.git
cd sendrepute-prestashop
2. Güvenli şekilde yapılandırın
SENDREPUTE_API_BASE değerini bu modül için sağlanan standart üretim SendRepute HTTPS kaynağına ve SENDREPUTE_API_TOKEN değerini PHP-FPM/sunucu ortamındaki kapsamlı bir sunucu belirtecine ayarlayın. Base, yol içermeyen genel bir DNS HTTPS kaynağı olmalıdır; sabit değerler, kimlik bilgileri, yönlendirmeler ve özel DNS yanıtları reddedilir. Ücretli olmayan hesap/fiyatlandırma bağlantı kontrolünü çalıştırın, ardından modülü, ücretli/içerik onayını ve tam şablon adlarını açıkça etkinleştirin. Advisory/block, eşik ve open/closed hata politikasını bağımsız olarak seçin.
export SENDREPUTE_API_BASE="replace-with-the-canonical-sendrepute-https-origin"
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
3. Bilinçli şekilde kullanın
PrestaShop'un normal Mail::send akışını kullanmaya devam edin. Erken kanca yalnızca onaylanmış tam şablonu hatırlar. Son kanca, alıcıları, üstbilgileri, ekleri veya transport nesnesini değiştirmeden önceden oluşturulmuş Symfony Email konusunu, metin gövdesini ve HTML gövdesini okur. İkili gövdeler için, tek bir istekte etkisiz düz metin ve orijinal HTML'yi yazılan alternatifler olarak gönderir; bağımsız hizmet normalleştirmesi, denetim için görünür HTML bağlantı ve resim hedeflerini korurken bir parçanın diğerini tüketmesini engeller. Tek bir düz metin gövdesi dar etkisiz metin yolunda kalır ve tek bir HTML gövdesi dar DOM çıkarma yolunda kalır. Sınıflandırma, PrestaShop ayrı bir DKIM imzalı mesaj oluşturmadan önce tamamlanır. Desteklenen sürüm matrisi, sınıflandırmadan sonra yayılan çok parçalı yapıyı ve DKIM gövde hash'ini ve RSA imzasını doğrulamıştır. PrestaShop'un sabitlenmiş imzalama yolu, hazırlanan imzalı üstbilgilerden Bcc'yi çıkarır ve bu gizli SMTP alıcısını kaybeder; bu nedenle geçerli imza kanıtı Bcc teslimat uyumluluğunu tesis etmez. Bu desteklenen yolda DKIM ve Bcc'yi birleştirmeyin. Desteklenmeyen görüntüleme kaynakları, aktif semantikler, belirsiz quoted-printable veya base64 HTML ve aşırı büyük toplam içerik, ödeme öncesinde yapılandırılan hata politikasını izler. Kasıtlı olarak onaylanmadıkça kritik şablonları seçilmemiş olarak bırakın.
Sonuçlar, hatalar ve limitler
Sınıflandırıcı, bağımsız olarak analiz edilen görüntülenen alternatifler olarak bir text/plain gövdesini, bir text/html gövdesini veya her ikisini birden kabul eder. Kabul edilen bir alternatifteki düz metin, varlık, gizli ve stil içeriği, sonraki bir alternatifi tüketemez veya gizleyemez; belirsiz quoted-printable veya base64 HTML bunun yerine ödeme öncesinde reddedilir. Kabul edilen herhangi bir alternatif en yüksek riskli sonucu belirleyebilir, içerik denetimleri ise her alternatifi kapsar; sınıflandırma, yalnızca sınırlı girdinin tamamı kabul edildikten sonra bir kez ücretlendirilir. Gerekli eski gövde, ikili bir mesaj için etkisiz düz alternatifin aynısıdır ve bu kopya ile her iki yazılan alternatif tam olarak 524288-byte istek bütçesini paylaşır. Alıcılar, ekler ve gömülü kaynaklar hariç tutulur ve orijinal imza öncesi transport mesajı korunur. Gerçek posta düzeneği, MIME/imza bütünlüğünü ve gerçek SMTP alıcılarını ayrı ayrı kontrol eder: DKIM imzaları sınıflandırmadan sonra geçerli kalır, ancak denetlenen yukarı akış imzalı yolu Bcc alıcılarını korumaz. Doğrulanmış bir sınıflandırma, sınırlı bir güncel tavsiye özeti depolar. Engelleme modu yalnızca eşik değerinde veya üzerinde hata verir; ikili arabirim istisnası kanca gönderiminden sağ çıkar ve kurulu dört sürümün tamamında transport öncesinde false üretir. Desteklenmeyen içerik, API ve doğrulama hataları açık/kapalı politikasını bağımsız olarak izler. Bir HTTPS denemesi sabitlenmiş genel DNS, doğrulanmış TLS, sınırlı zaman aşımları, 256 KiB yanıt sınırı, yönlendirme içermeyen ve yeniden deneme içermeyen bir yapı kullanır. Engelleme, son kanca dönüş değerine değil, denetlenen PrestaShop Mail::send() özel durum yakalamasına (exception catch) dayanır.
Symfony Mailer adaptörü
0.1.1
PHP 8.1+ gerektirir ve yalnızca Symfony Mailer 6.4 veya 7.4 sürümlerini hedefler; doğrulanmış kesin sürümler 6.4.46 ve 7.4.19'dur. Symfony 8.1 veya test edilmemiş serilerle uyumluluk iddiası bulunmamaktadır. Yerel kaynak ZIP dosyasını bir Composer yol deposu (path repository) aracılığıyla yükleyin; bu paket Packagist üzerinde yayınlanmamıştır.
Paket ve ücretli onay varsayılan olarak kapalıdır ve yalnızca tam olarak yapılandırılmış katılım (opt-in) başlığına sahip bir mesaj işleme alınabilir. Danışma veya engelleme puanı politikası, izin verme veya engelleme hata politikasından bağımsızdır. Sınıflandırma, resmi gönderim öncesi MessageEvent üzerinde çalışır; reddetme işlemi MessageEvent::reject() kullanır. Kuyruğa alınmış klon olayları atlanır, böylece çalışan (worker) taşıma olayı tek ücretli sınıflandırma noktası olur.
Symfony kaynak ZIP dosyasını indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
İndirilen ZIP dosyasını saklanan bir packages dizinine çıkarın, bu dizini bir Composer yol deposu olarak kaydedin, tam 0.1.1 paketini require ile ekleyin ve Flex otomatik olarak yapmazsa SendRepute\Symfony\SendReputeBundle kaydını yapın. Kaynak arşivi yereldir ve yayımlanmamıştır.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-symfony.zip -o packages/sendrepute-symfony.zip
unzip packages/sendrepute-symfony.zip -d packages
composer config repositories.sendrepute path ./packages/sendrepute-symfony
composer require sendrepute/symfony:0.1.1
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-symfony.git
cd sendrepute-symfony
2. Güvenli şekilde yapılandırın
SENDREPUTE_API_TOKEN değerini sunucu gizli anahtarlarından çözümleyin. Güncel fiyatlandırmayı incelerken enabled ve paid_analysis_consent değerlerini false olarak tutun. Mod, eşik ve hata politikası birbirinden bağımsızdır. Uç nokta; doğrulanmış HTTPS, sınırlı süreler, yönlendirme veya yeniden deneme olmaması ve 1 MiB yanıt sınırı ile sabitlenmiştir.
send_repute:
enabled: false
paid_analysis_consent: false
api_token: '%env(SENDREPUTE_API_TOKEN)%'
mode: advisory
failure_policy: allow
spam_probability_threshold: 0.8
3. Bilinçli şekilde kullanın
Tam onay başlığını yalnızca incelenmiş kritik olmayan Email nesnelerine ekleyin, ardından normal Mailer üzerinden devam edin. Mesaj, envelope, transport ve header yeniden yazılmaz. Messenger teslimatı için paketi worker'larda yapılandırın: producer kopyalama olayları kasıtlı olarak sınıflandırılmaz.
$email->getHeaders()->addTextHeader('X-SendRepute-Classify', 'yes');
$mailer->send($email);
Sonuçlar, hatalar ve limitler
Tam olarak bir adet bellek içi text veya HTML gövdesi desteklenir. Karma alternatifler, metinsel DataParts, akışlar veya yollar, CSS süslü ayraçları, işaretleme, quoted-printable sözdizimi, base64 başlıkları veya tüm gövde base64 ödeme öncesinde başarısız olur ve hata politikası izler; normal süslü ayraçsız içerik değiştirilmez. Gerekli her iç içe geçmiş yanıt alanı ve isteğe bağlı denetim dalı doğrulanır ve bilinmeyen özellikler reddedilir. Tavsiye modu asla skor engellemesi yapmaz; engelleme, gerçek taşıma olayı aracılığıyla eşik değerinde reddeder.
Rails Action Mailer adaptörü
0.1.0
Ruby 3.2+ gerektirir ve gerçek Action Mailer 7.1.6 ve Mail 2.9.1 ile dar kapsamlı olarak doğrulanmıştır; geri çağırma yolu Action Mailer 7.2.3.2 üzerinde de gözlemlenmiştir. Bu, izin verilen her Rails 7.x sürümünün sertifikasyonu değildir. Yerel kaynak ZIP dosyasını Bundler aracılığıyla yükleyin; herhangi bir RubyGems yayını iddia edilmemektedir.
Her iki küresel ücretli geçit varsayılan olarak kapalıdır ve her bir postacı eylemi sendrepute_paid_preflight! yöntemini açıkça çağırmalıdır. Danışma/engelleme puanı davranışı ile koruma/engelleme hata davranışı birbirinden bağımsızdır. Parola sıfırlama, MFA, giriş, doğrulama, faturalama ve güvenlik yolları seçilmemiş olarak kalmalıdır. Her çok parçalı mesaj ve belirsiz CSS, quoted-printable veya base64 görünümlü içerik ödeme öncesinde reddedilir; kabul edilen bir adet kodu çözülmüş metin veya HTML gövdesi, orijinal mesajı veya taşıma yapısını değiştirmeden analiz edilir.
Rails kaynak ZIP dosyasını indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
ZIP dosyasını tam olarak vendor/sendrepute-rails içine çıkarın, Gemfile dosyasına yerel yol girişini ekleyin, kontrollü ortamınızda Bundler'ı çalıştırın ve ApplicationMailer içine SendRepute::Rails::Mailer dahil edin. Bu bir RubyGems kurulumu değildir.
# Download sendrepute-rails.zip, then extract it into vendor/sendrepute-rails.
gem "sendrepute-rails", path: "vendor/sendrepute-rails"
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-rails.git
cd sendrepute-rails
2. Güvenli şekilde yapılandırın
Güncel fiyatlandırma ve rotalar incelenene kadar enabled ve paid_consent seçeneklerini false olarak tutun. Belirteci Rails credentials dosyasından veya başka bir sunucu gizli anahtarından okuyun. advisory/block, preserve/block ve threshold değerlerini birbirinden bağımsız olarak yapılandırın; on_result ve on_error geri çağırmaları ileti içeriğini, yetkilendirme verilerini veya tam yanıtları günlüğe kaydetmemelidir.
SendRepute::Rails.configure do |config|
config.enabled = false
config.paid_consent = false
config.token = Rails.application.credentials.dig(:sendrepute, :api_token)
config.mode = :advisory
config.failure_policy = :preserve
config.score_threshold = 0.8
end
3. Bilinçli şekilde kullanın
sendrepute_paid_preflight! yöntemini yalnızca bilinçli olarak seçilen kritik olmayan mailer eylemleri içinde çağırın. Normal eylemler sınıflandırmayı atlar. Ücretli kanca Action Mailer'ın before_deliver rotasını kullanır; global bir otomatik katılım sağlanmaz ve bağdaştırıcı Mail::Message nesnesini yeniden yazmaz.
class ApplicationMailer < ActionMailer::Base
include SendRepute::Rails::Mailer
end
def newsletter
sendrepute_paid_preflight!
mail(to: params[:to], subject: "News")
end
Sonuçlar, hatalar ve limitler
Koda dönüştürülmüş tek bir text/plain veya text/html görüntülenen gövde desteklenir. Her çok parçalı veya belirsiz normalizer girdisi ödemeden önce başarısız olur ve hata politikası izler. Tam tipli iç içe geçmiş bir yanıt, yalnızca eşik değerinde veya üzerinde engelleme modunda engelleme yapabilir; tavsiye modu tüm puanları korur. Sonuç ve hata geri çağırmaları değiştirilemez güvenli veriler alır; geri çağırma istisnaları veya throw(:abort) tavsiye sürecini sonlandırmaması veya teslimatı korumaması için yerel olarak yakalanır. Sabit uç nokta yönlendirmeleri ve yeniden denemeleri reddeder ve sınırlı bir toplam zaman sınırı kullanır. Gerçek Action Mailer 7.1.6 testleri geçti: 19 çalışma ve 59 doğrulama; hiçbir ücretli istek veya gerçek teslimat gerçekleşmedi.
Spring JavaMailSender adaptörü
0.1.1
Java 17+ gerektirir ve Spring Framework 6.2.x JavaMailSender hedefler; tam bağımlılık doğrulaması Spring Framework 6.2.19 kullanılarak yapılmıştır. Spring Boot 4 veya geniş kapsamlı çerçeve sürümü iddiası bulunmamaktadır. Yerel kaynak ZIP dosyasını Maven ile oluşturun; Maven Central veya başka bir sicilde yayınlanmamıştır.
Dekoratör, ücretli onay, danışma modu ve hataya izin verme varsayılanları açıkça belirtilmiştir. Yalnızca sendWithSendRepute(...) ücretli gönderim öncesi analizi gerçekleştirir; her sıradan send(...) aşırı yüklemesi sınıflandırmayı atlar ve değişmeden delege edilir. Kritik postalar için, o gönderim özel olarak seçilmedikçe sıradan send kullanın. Desteklenen görüntülenen MIME alternatifleri atıl bir şekilde birlikte çerçevelenir; desteklenmeyen, iç içe geçmiş, imzalı, şifreli veya belirsiz içerik ödeme öncesinde başarısız olur.
Spring Java kaynak ZIP indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
0.1.1 kaynak ZIP dosyasını çıkarın, mvn verify komutunu çalıştırın ve yalnızca kontrollü yerel Maven deponuza kurun. Tüketen uygulama, mevcut JavaMailSender ve çalışma zamanı posta uygulamasını sağlar. Kesin bağımlılık doğrulaması Java 17 bayt kodu, Spring Framework 6.2.19 ve ekteki README dosyasında belgelenen sürümleri kullanmıştır.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-spring-mail.zip
unzip sendrepute-spring-mail.zip
cd sendrepute-spring-mail-0.1.1
mvn verify
mvn install
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-java.git
cd sendrepute-java
2. Güvenli şekilde yapılandırın
Sunucu tarafı belirteci ve açık anahtarlardan SendReputeConfiguration oluşturun. Fiyatlandırma ve seçilen çağrılar incelenene kadar enabled ve paidAnalysisConsent değerlerini false olarak tutun. Tavsiye/engelleme, eşik ve izin ver/engelle hata politikası bağımsızdır. Uç nokta, yönlendirme veya yeniden deneme olmaksızın doğrulanmış HTTPS olarak sabittir.
var settings = new SendReputeConfiguration(
token, false, false,
SendReputeConfiguration.Mode.ADVISORY,
SendReputeConfiguration.FailurePolicy.ALLOW,
0.80, Duration.ofSeconds(3), Duration.ofSeconds(10));
var reviewedSender = new SendReputeJavaMailSender(existingSender, settings);
3. Bilinçli şekilde kullanın
Yalnızca analize tabi tutulması gereken bireysel bir SimpleMailMessage, MimeMessage veya MimeMessagePreparator için sendWithSendRepute(...) çağrısını yapın. Tekli ve varargs aşırı yüklemeleri (overloads) desteklenir. Her normal send(...) aşırı yüklemesi sınıflandırmayı atlar. Hazırlayıcılar (preparators) bir kez işlenir ve orijinal hazırlanan MIME, ilke izin verdikten sonra delege edilir.
// Paid classification is possible only on this explicit method.
reviewedSender.sendWithSendRepute(reviewedMessage);
// Every ordinary JavaMailSender send overload bypasses classification.
reviewedSender.send(criticalMessage);
Sonuçlar, hatalar ve limitler
Desteklenen tüm görüntülenen düz metin ve HTML bölümleri analiz edilir; alıcılar ve ekler kapsam dışıdır. Gezinme 16 seviye, 256 bölüm ve 524,288 görüntülenen UTF-8 baytı ile sınırlandırılmıştır. Yoksayılan satır içi ikili veriler asla somutlaştırılmaz; bilinmeyen veya sınırsız geç yüklenen görüntülenen kaynaklar, bir akış açılmadan veya ücretli bir istek yapılmadan önce başarısız olur ve desteklenen kaynak okumaları sınırlandırılır. Sayısal varlık çerçeveleme, parçaları denetlenen sunucu normalleştirici sırası boyunca etkisiz tutar. Tüm varargs grupları, ilk ücretli istekten önce hazırlanır ve normalleştirilir; denetim işlemi Jakarta Mail başlıkları oluşturmaz. Özyinelemeli olarak tam bir iç içe geçmiş yanıt gereklidir.
Magento Open Source e-posta bağdaştırıcısı
0.1.1
Yalnızca incelenmiş tam değişmez e-posta arayüzü kaynaklarına sahip Magento Open Source 2.4.7-p5 ve 2.4.7-p6 sürümlerini destekler. Çevrimdışı yazılmış fikstürler geçmiştir ancak tam bir Magento kurulumu gerçekleştirilmemiştir; başka hiçbir Magento veya Adobe Commerce sürümü sertifikalı değildir. Yerel ZIP dosyasını bir Composer yol deposu üzerinden kurun; bu bir Adobe Marketplace paketi değildir.
Modül, ücretli onay ve rota listelerinin tümü varsayılan olarak kapalıdır. Her şablon tanımlayıcısı için bağımsız iki kesin onay gerekir; kritiklik hiçbir zaman isminden çıkarılmaz. aroundSendMessage eklentisi, mesajı yeniden oluşturmadan son taşıma sınırında analiz eder. Danışma/blok eşik politikası ve koruma/blok hata politikası bağımsızdır; engelleme görünür bir Magento MailException hatası oluşturur. Birden fazla görüntülenen MIME bölümleri ve belirsiz içerikler ödemeden önce başarısız olur.
Magento kaynak ZIP dosyasını indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
ZIP dosyasını korunan bir paket dizinine çıkarın, SendRepute_MailAdapter kök dizinini bir Composer yol deposu olarak kaydedin, 0.1.1 sürümünü talep edin, ardından Magento'nun normal modül etkinleştirme ve kurulum yükseltme sürecini kullanın. Bu yerel arşivi bir Adobe Marketplace paketi olarak sunmayın.
mkdir -p packages/sendrepute-magento
curl -fLO https://www.sendrepute.com/downloads/sendrepute-magento.zip
unzip sendrepute-magento.zip -d packages/sendrepute-magento
composer config repositories.sendrepute path ./packages/sendrepute-magento/SendRepute_MailAdapter
composer require sendrepute/magento-mail-adapter:0.1.1
bin/magento module:enable SendRepute_MailAdapter
bin/magento setup:upgrade
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-magento.git
cd sendrepute-magento
2. Güvenli şekilde yapılandırın
SENDREPUTE_API_TOKEN değerini yalnızca PHP-FPM ve CLI sunucu ortamında ayarlayın. Stores > Configuration > Services > SendRepute menüsünde, modülü ve ücretli onayı başlangıçta kapalı tutun. Her bir tam şablon tanımlayıcısını her iki bağımsız rota onay listesine ekleyin; sayısal adlar dahil olmak üzere adlar asla kritiklik çıkarımı yapmaz. Danışma/engelleme, eşik ve koruma/engelleme hata davranışını ayrı ayrı yapılandırın.
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
# Then configure Stores > Configuration > Services > SendRepute.
3. Bilinçli şekilde kullanın
Magento'nun normal şablon ve taşıma akışını kullanmaya devam edin. Rota korelasyonu, TransportBuilder aracılığıyla seçilen tam tanımlayıcıyı ve mağazayı kaydederken, nihai aroundSendMessage eklentisi aynı taşıyıcıyı çağırmadan önce resmi tipli e-posta ve MIME arayüzlerini okur. Oluşturucu durumu finally bloğunda temizlenir ve oluşturucu/mesaj korelasyonları nesne anahtarlı WeakMap girişlerini kullanır; böylece terk edilmiş bir oluşturulmuş taşıma, yeniden kullanılabilir sayısal nesne-ID yetkilendirmesi bırakamaz. Adaptör yeni bir send yöntemi sağlamaz veya mesajı değiştirmez.
Sonuçlar, hatalar ve limitler
Yalnızca desteklenen bir görüntülenen MIME bölümü kabul edilir; ekler korunur ancak analizin dışında tutulur. Birden fazla görüntülenen bölüm, desteklenmeyen aktarım kodlamaları veya karakter setleri, akışlar, iç içe geçmiş MIME ve belirsiz normalleştirici metinleri ödeme öncesinde başarısız olur. Doğrulanmış bir HTTPS isteği, yeniden deneme veya yönlendirme olmaksızın sınırlı son tarihlere ve yanıt boyutuna sahiptir. Geçerli bir iç içe geçmiş sonuç eşik değerinde engelleyebilir; yapılandırılmış fail-block ayarı Magento MailException hatası oluşturur.
.NET MailKit adaptörü
0.1.0
.NET 8 ve MailKit/MimeKit 4.18.0 için kesin bağımlılık kanıtı gerektirir. Bu, uygulama tarafından sahiplenilen bir IMailTransport için açık bir sarmalayıcıdır; küresel bir hook, SMTP istemcisi veya yedek taşıma aracı değildir. Yerel kaynak ZIP dosyasını derleyin veya referans verin; herhangi bir NuGet yayını iddia edilmemektedir.
Adaptör ve ücretli onay varsayılan olarak kapalıdır; tavsiye ve gönderimi koruma bağımsız varsayılanlardır. AnalyzeAsync, AnalyzeThenSend veya AnalyzeThenSendAsync çağrıları açıkça belirtilmelidir. Kritik güvenlik/hesap postaları ayrı bir çağrı bazlı kategori ve rıza gerektirir. Desteklenen tüm düz/HTML alternatifleri tek bir sınırlı istek içinde eylemsiz şekilde çerçevelenir; desteklenmeyen, iç içe geçmiş, imzalı veya şifrelenmiş içerik ödeme öncesinde başarısız olur. Orijinal MimeMessage ve iptal belirteci, mevcut taşıyıcıya yalnızca politika izin verdikten sonra ulaşır.
.NET MailKit kaynak kodunu ZIP olarak indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Kaynak ZIP dosyasını çıkarın ve tüketen .NET 8 projesinden src/SendRepute.MailKit/SendRepute.MailKit.csproj dosyasını referans gösterin. Restore işlemi MailKit/MimeKit 4.18.0 sürümünü alır. Bu kaynak paketi yereldir ve yayımlanmamıştır; bir NuGet kurulumu değildir.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-mailkit.zip
unzip sendrepute-mailkit.zip
dotnet add reference ./sendrepute-mailkit-0.1.0/src/SendRepute.MailKit/SendRepute.MailKit.csproj
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-dotnet.git
cd sendrepute-dotnet
2. Güvenli şekilde yapılandırın
Mevcut uygulama sahipliğindeki IMailTransport yapısını SendReputeMailAdapter ile sarmalayın. API token bilgisini sunucu yapılandırmasından okuyun ve inceleme tamamlanana kadar Enabled ve PaidAnalysisConsent seçeneklerini false olarak tutun. Danışmanlık/engelleme eşiği ile koruma/engelleme hata ayarları birbirinden bağımsızdır. Uç nokta, TLS tabanı, tek deneme davranışı, son tarihler ve 1 MiB sınırları sabittir.
var options = new SendReputeOptions {
Enabled = false,
PaidAnalysisConsent = false,
ApiToken = configuration["SENDREPUTE_API_KEY"]!,
Enforcement = EnforcementPolicy.Advisory,
OnFailure = FailurePolicy.PreserveSend,
SpamProbabilityThreshold = 0.80
};
var adapter = new SendReputeMailAdapter(existingTransport, new SendReputeClient(options), options);
3. Bilinçli şekilde kullanın
Yalnızca analiz için AnalyzeAsync yöntemini veya açık gönderim öncesi davranış için AnalyzeThenSend ve AnalyzeThenSendAsync yöntemlerini çağırın. Hiçbir sıradan veya küresel posta yolu kesilmez. Seçilen her işlemde ücretli onayı ve mesaj kategorisini iletin; kritik güvenlik/hesap postaları ayrı bir critical-consent ayarı gerektirir.
await adapter.AnalyzeThenSendAsync(message, new AnalysisConsent {
PaidAnalysisConsent = true,
Category = MessageCategory.Ordinary
}, cancellationToken);
Sonuçlar, hatalar ve limitler
Gerçek MimeKit çözümlemesi, alıcıları ve ekleri hariç tutarken her desteklenen görüntülenen düz metin ve HTML alternatifini etkisiz çerçeveleme içinde toplar. base64 olmayan dış çerçeveleme ve geç çözümlenen varlıklar; servis normalizasyonundan önce CSS parantezlerini, quoted-printable metinleri, base64 üstbilgilerini, tüm gövde base64 verilerini ve işaretlemeleri nötralize eder. Desteklenmeyen, iç içe geçmiş, imzalı veya şifreli görüntülenen içerikler ödemeden önce başarısız olur. Gerekli her yanıt alanı tiplendirilmiştir; isteğe bağlı flaggedTermCount negatif olmayan bir tam sayı olmalıdır ve isteğe bağlı contentAudit, genel sözleşmeye karşı tam ve özyinelemeli olarak doğrulanır. Tam orijinal MimeMessage ve iptal belirteci, yalnızca bağımsız puan ve hata politikaları izin verdiğinde sağlanan taşıyıcıya ulaşır.
Zapier manuel taslak analizi
0.2.0
Sahibi tarafından seçilen tam olarak üç taslak dizesinin ücretli analizini görüntülemek için manuel Zapier tarifi. Bu bir SendRepute Zapier uygulaması, pazar yeri listesi, içe aktarma yapıtı, gönderim öncesi adaptörü, gönderici, izin verme/engelleme rotası veya tam mesaj sınıflandırıcısı değildir. Zapier Webhooks, SendRepute belirtecinin Zap içine girmemesi gerektiğinden, sahibi tarafından işletilen sınırlı bir HTTPS proxy kullanır.
İki derleme zamanı sabiti HTTP öncesinde varsayılan olarak false değerini alır. Zap; yalnızca gönderici görünen adını, konusunu ve gövdesini eşler, JSON verisini dahil edilen sahip vekili (owner-proxy) tasarımına gönderir, iç içe geçmiş yanıtı tamamen doğrular ve ardından özel bir inceleme adımında tavsiye ve faturalandırma alanlarını görüntüler. Bir gönderici, Paths zorlaması, Autoreplay veya hata durumunda koruma rotası eklememelidir; başarısız olan Code veya Webhook adımları durur.
Zapier ve Make tarifi ZIP dosyasını indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Paylaşılan 0.2.0 reçete kaynağını indirin ve çıkarın. Ekli Zapier kılavuzunu okuyun ve dahil edilen loopback Node proxy'sini yalnızca sahibi tarafından yönetilen bir HTTPS ters proxy arkasında dağıtın. Bu paket bunu dağıtmaz. Bir SendRepute Zapier uygulaması veya içe aktarılabilir Zap yapıtı yoktur.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-automation-recipes.zip
unzip sendrepute-automation-recipes.zip
cd sendrepute-automation-recipes
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-automation.git
cd sendrepute-automation
2. Güvenli şekilde yapılandırın
Zap'i kapalı tutun. Tam preflight Code kaynağında, ücretli kullanım incelenene kadar ENABLED ve PAID_CONSENT false olarak kalır. Sahip proxy'si SENDREPUTE_API_TOKEN değerini saklar; Zap, SENDREPUTE_PROXY_CREDENTIALS arasından yalnızca tek bir ayrı iptal edilebilir kimlik bilgisi alır. Düzenleyiciler ve görev geçmişi bunu ifşa edebilir, bu nedenle kısıtlayın, döndürün ve iptal edin. Her kimlik bilgisi başına token-bucket ve eşzamanlılık sınırlarını, küresel bağlantı/eşzamanlılık limitlerini, sahip tarafından belirlenen kalıcı günlük ücretli çağrı bütçesini, kısıtlayıcı yukarı akış harcama limitlerini ve eşleşen TLS-terminator boyut/hız/son tarih kontrollerini yapılandırın. Autoreplay özelliğini etkinleştirmeyin.
// In zapier/preflight.js; review charges before changing either literal.
const ENABLED = false;
const PAID_CONSENT = false;
3. Bilinçli şekilde kullanın
Adımları manuel olarak oluşturun: taslak tetikleyici; yalnızca gönderen, konu ve gövdeyi eşleyen preflight Code; sahip proxy'sine JSON satırları ile Webhooks POST; yanıt doğrulama Code; özel inceleme ekranı. Ham JSON'u asla manuel olarak enterpole etmeyin. Yalnızca requestId, model, label, spamProbability ve billing bilgilerini görüntüleyin; bir posta eylemi veya Paths kararı eklemeyin.
{
"sender": "Mapped draft sender display name",
"subject": "Mapped draft subject",
"body": "Mapped draft body"
}
Sonuçlar, hatalar ve limitler
Reçete yalnızca üç eşlenmiş dizeyi analiz eder; eşlenmemiş MIME, HTML alternatifleri, ekler ve nihai giden içerik analiz edilmeden kalır. Muhafazakar preflight, bilinen normalleştirici tetikleyicilerini reddeder ancak tüm mesaj kapsamını kanıtlamaz. Proxy hızı, eşzamanlılık ve günlük bütçe sınırları yukarı akıştan önce reddeder ve bütçe rezervasyonu ücretli denemeden önce devam eder; bütçe dosyası başına bir proxy işlemi çalıştırın. Proxy bir adet sınırlandırılmış sabit HTTPS denemesi yapar. 200 olmayan veya eksik herhangi bir tam yanıt hata fırlatır ve durur; koruma, Resume veya ikame sonuç yoktur.
Make manuel taslak analizi
0.2.0
Tam olarak seçilmiş üç taslak dizesinin ücretli analizini görüntülemek için manuel Make senaryo talimatları. Bu bir blueprint, onaylı SendRepute uygulaması, e-posta göndericisi, uygulama rotası değildir ve eşlenmemiş MIME, HTML, ekler veya nihai giden içerik hakkında bir iddia teşkil etmez. Taşıyıcı token (bearer token) yalnızca Make HTTP'nin güvenli anahtarlığında (keychain) bulunmalıdır.
Kalıcı hale getirilmiş enabled ve paidConsent boole değerleri varsayılan olarak false şeklindedir ve bir AND filtresi HTTP'den önce durur. JSON, Make'in JSON modülü tarafından üretilir ve yönlendirmeler ile denemeler devre dışı bırakılmış olarak HTTP modülü tarafından bir kez gönderilir. Bir yanıt filtresi yalnızca bir görüntüleme korumasıdır, tam doğrulama veya gönderme izni değildir. HTTP hataları Break kullanır, asla Resume kullanmaz veya çıktıyı ikame etmez.
Zapier ve Make tarif ZIP dosyasını indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Paylaşılan 0.2.0 reçete kaynağını indirin ve çıkarın, ardından mevcut yerel modülleri manuel olarak oluşturmak için dahil edilen Make kılavuzunu izleyin. Hiçbir taslak, pazar yeri uygulaması veya içe aktarma formatı iddia edilmemektedir. Bir sahte uç noktasına karşı test yaparken senaryo zamanlamasını kapalı tutun.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-automation-recipes.zip
unzip sendrepute-automation-recipes.zip
cat sendrepute-automation-recipes/make/README.md
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-automation.git
cd sendrepute-automation
2. Güvenli şekilde yapılandırın
Kalıcı boolean Tools değişkenleri enabled=false ve paidConsent=false oluşturun, ardından her ikisinin de true olmasını gerektiren bir AND filtresi uygulayın. Tam olarak sender, subject ve body için JSON > Create JSON kullanın. SendRepute taşıyıcı belirtecini (bearer token) yalnızca HTTP uygulaması güvenli anahtar zincirinde saklayın; dışa aktarılan senaryolar hiçbir kimlik bilgisi içermemelidir.
Tools variables: enabled = false; paidConsent = false
Filter: enabled = true AND paidConsent = true
HTTP credential: secure keychain; Authorization header
Body type: Raw; Content type: application/json; map serialized JSON
Follow redirect: No; Timeout: 10 seconds; no retry
Response filter: Minimal display guard
3. Bilinçli şekilde kullanın
Sabit classify URL'sine bir HTTP POST yapılandırın. Body türü olarak Raw ve application/json content-type kontrolünü seçin, ancak çakışan bir serbest metin üstbilgisi eklemeyin; ardından JSON > Create JSON üzerinden serileştirilmiş çıktıyı eşleyin. Ayrıştırılmış yanıtı etkinleştirin, yönlendirmeleri devre dışı bırakın, 10 saniyelik bir zaman aşımı ayarlayın ve herhangi bir tekrarlayıcı veya otomatik yeniden deneme eklemeyin. Modülün 1 MiB yanıt sınırını zorunlu tutun; bu mevcut değilse, bunun yerine sahibi tarafından kontrol edilen sınırlandırılmış bir proxy kullanın. Minimal display guard sonrasına yalnızca özel bir inceleme ekranı ekleyin; asla bir gönderici veya izin ver/engelle yönlendiricisi eklemeyin.
{
"sender": "Mapped draft sender display name",
"subject": "Mapped draft subject",
"body": "Mapped draft body"
}
Sonuçlar, hatalar ve limitler
Yalnızca eşlenen dizeler analiz edilir; normalizasyon orijinal veya giden bir e-posta ile kimlik eşleşmesi değildir. Yanıt filtresi yalnızca durumu ve çekirdek sonuç/faturalandırma varlığını kontrol eder ve açıkça tam şema doğrulama veya zorlama değildir. HTTP hataları, sonraki eylemlerin çalışmaması için Break kullanır; asla Resume, sahte çıktı veya hata koruma yolu kullanmayın.
Node.js SDK
0.1.1
Node.js 18.17+ için yalnızca sunucu tarafı SDK. npm üzerinden @sendrepute/node yükleyin veya indirilebilir tarball dosyasını kullanın. İsteğe bağlı Nodemailer adaptörü mevcut iletiminizi korur. Sunucu ortamınızda kapsamlı bir API anahtarı ve açık bir API temel URL'si belirleyin, asla tarayıcı kodunda kullanmayın.
createSendReputePlugin kaydını stream aşamasında yalnızca fiyatlandırmayı inceledikten ve ücretli analiz onayını kasıtlı olarak etkinleştirdikten sonra yapın. Danışma modu, teslimatı engellemeden bulguları raporlar. Engelleme modu spamProbabilityThreshold değerini zorunlu kılar; onApiFailure ise allow veya block seçeneklerini kullanır, değişen fiyat reddi ise her zaman teslimatı engeller. Sınıflandırma, ücretli bir API işlemidir.
Node.js tarball dosyasını indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
Doğrulanmış npm paketini görüntüle
1. Yükleyin
Doğrulanmış npm paketi @sendrepute/node 0.1.1 sürümüdür; kayıt defteri kurulumlarını @sendrepute/node@0.1.1 olarak sabitleyin. Web sitesi tarball ve sabitlenmiş genel depo, 0.1.1 sürüm kaynağını ve derlemesini sağlar. Nodemailer isteğe bağlıdır ve yalnızca taşıma adaptörü için gereklidir. SDK; hesap, katalog, sınıflandırma, AI ve derleyiciler için tiplendirilmiş müşteri API isteklerini destekler. Bunu bir Node.js sunucusunda kullanın, asla bir tarayıcı paketinde kullanmayın.
npm install @sendrepute/node nodemailer
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
npm install @sendrepute/node@0.1.1
npm install nodemailer
2. Güvenli şekilde yapılandırın
Sunucu gizli anahtar deponuzdan SENDREPUTE_API_KEY enjekte edin ve barındırılan müşteri API'si için aşağıdaki açık temel URL'yi ayarlayın. Gizli anahtarları komutlara, kaynak dosyalara veya günlüklere yapıştırmayın. Yalnızca operasyonlarınızın gerektirdiği kapsamları verin. Kurulum SMTP değil, yerel bir oluşturma taşıyıcısı kullanır; ücretli girişimleri bilinçli hale getirmek için maxRetries burada sıfıra ayarlanmıştır.
export SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
Nodemailer kurulumu
Bu örnek yerel bir işleme taşıması yapılandırır ve sendMail çağırmaz. Yapılandırılmış eklenti üzerinden gönderim yapmak ücretli bir analiz gerçekleştirir. Yerel taşımayı ancak hazır olduğunuzda mevcut SMTP taşımanızla değiştirin.
import nodemailer from "nodemailer";
import { SendReputeClient } from "@sendrepute/node";
import { createSendReputePlugin } from "@sendrepute/node/nodemailer";
const apiKey = process.env.SENDREPUTE_API_KEY;
const baseUrl = process.env.SENDREPUTE_API_BASE_URL;
if (!apiKey || !baseUrl) {
throw new Error("SENDREPUTE_API_KEY and SENDREPUTE_API_BASE_URL are required");
}
const client = new SendReputeClient({ apiKey, baseUrl, maxRetries: 0 });
const transporter = nodemailer.createTransport({
streamTransport: true,
buffer: true,
newline: "unix",
});
transporter.use("stream", createSendReputePlugin({
client,
policy: {
paidAnalysisConsent: true,
mode: "blocking",
spamProbabilityThreshold: 0.85,
onApiFailure: "block",
},
}));
3. Bilinçli şekilde kullanın
Yukarıdaki kurulumdaki istemciyi kullanın. Bir onay eylemi görüntülemeden önce hesabı ve güncel fiyatlandırmayı okuyun. classifyAfterConsent işlevini yalnızca onaydan sonra kimliği doğrulanmış bir sunucu eyleminden çağırın; türü belirlenmiş sınıflandırma ve faturalandırma yanıtını döndürür. Yapılandırılmış Nodemailer eklentisi aracılığıyla gönderim yapmak da ücretli bir sınıflandırma eylemidir. Adaptör paidAnalysisConsent: true gerektirir ve kayıt öncesinde diğer değerleri reddeder; bunu yalnızca yetkilendirmeden sonra ayarlayın.
// Uses client from the setup above; nothing calls this function automatically.
async function classifyAfterConsent({ sender, subject, body, confirmed }) {
if (confirmed !== true) throw new Error("Paid consent required");
return client.request("classifyCustomerEmail", { body: { sender, subject, body } });
}
async function readAccountAndPricing() {
return Promise.all([
client.request("customerGetAccount", {}),
client.request("customerGetPricingSettings", {}),
]);
}
Standart ve yerel VIP oluşturucular
Ücretsiz standart oluşturucu; MJML'yi HTML, MJML veya her ikisinin bir ZIP dosyası olarak içe aktarır, doğrular, derler ve dışa aktarır. Ayrı olan yerel VIP oluşturucu MJML değil, kendi belge formatını kullanır: içe aktarma, doğrulama, derleme ve dışa aktarma işlemleri aktif üyelik ve sahip olunan, açık bir erişim yetkisi gerektirir; ZIP dosyası üç HTML CSS varyantı içerir. İsteğe bağlı yapay zeka oluşturma ayrı olarak ücretlendirilir ve düzenlenebilir bir standart MJML veya yerel VIP tasarımı üretir; güncel geçerli fiyatlandırmayı gösterin ve asla sabit kodlanmış bir fiyat değil, onaylanmış expectedPriceMillicents değerini iletin. ZIP yanıtları bir html alanı değil, archiveBase64 içerir: decodeExportBytes, uygulamanızın kaydetmesi için baytları döndürür. Bu işlem uç noktaları varlıkları çekmez, tasarımları kalıcı hale getirmez veya e-posta göndermez.
import { decodeExportBytes } from "@sendrepute/node";
async function exportStandardZip(mjml) {
const exported = await client.request("customerStandardBuilderExport", {
body: { mjml, format: "zip", filename: "newsletter.zip" },
});
return decodeExportBytes(exported);
}
async function generateNativeAfterConsent(prompt, expectedPriceMillicents, confirmed) {
if (confirmed !== true) throw new Error("Paid consent required");
return client.request("customerCreateVipEmailTemplate", {
body: { prompt, expectedPriceMillicents },
});
}
Başka neler yapabilir?
Oluşturulan işlem kimlikleri; hesap ve fiyatlandırma okumaları, sınıflandırma ve manuel düzenlemeler, AI yeniden yazma/şablon oluşturma, VIP planları/durumu/satın almaları, yerel şablonlar/erişim hakları ve durumsuz standart/yerel içe-dışa aktarımı kapsar. Her istek türü, gerekli kapsam ve güncel fiyat için kaynak örneklere ve müşteri API referansına bakın. Katalog okumaları erişim satın almaz. Yeni ücretli yetenekler, bilinçli olarak kapsama alınmış belirteçler ve açık kullanıcı arayüzü onayı gerektirir.
Sonuçlar, hatalar ve limitler
SendReputeError; status, code ve requestId alanlarını sunar; yalnızca bu güvenli operasyonel meta verileri saklayın. Gövdeleri, komutları (prompts), başlıkları veya tam yanıtları asla günlüğe kaydetmeyin. AbortSignal işlemi iptal eder; timeoutMs her deneme için geçerlidir. Sınırlı yeniden denemeler operasyon bilincine sahiptir ve makbuz koruması zaman sınırlıdır, sınırsız tam-bir-kez faturalandırma değildir. Advisory Nodemailer modu engellemeden raporlar; engelleme ise spamProbabilityThreshold ve onApiFailure seçeneklerini bağımsız olarak kullanır. Gerçek iletiminizi (transport) ayrı olarak koruyun ve test edin.
import { SendReputeError } from "@sendrepute/node";
async function readAccountSafely() {
try {
return await client.request("customerGetAccount", {});
} catch (error) {
if (error instanceof SendReputeError) {
console.error({
status: error.status, code: error.code, requestId: error.requestId,
});
}
throw error;
}
}
API ve yöntem referansı
SendReputeClient, apiKey ve baseUrl gerektirir; isteğe bağlı timeoutMs varsayılan olarak 30000 (maksimum 300000), maxRetries varsayılan olarak 2 (0–10 aralığı) değerini alır ve fetch uyumlu bir sunucu uygulamasını kabul eder. request(operationId, input, { signal }) işlemin tiplendirilmiş yanıtını döndürür; input gövde, path ve/veya query alanlarını içerir. Geçersiz yapılandırma TypeError hatasına yol açar; API hataları status, code, requestId ve retryAfterMs içeren SendReputeError kullanır. decodeExportBytes, bir ZIP dışa aktarımını Uint8Array türüne dönüştürür; ZIP olmayan veya geçersiz base64 girdilerini reddeder. OperationInput, OperationResponse ve oluşturulan şema tipleri TypeScript çağırıcıları için dışa aktarılır.
Alternatif: Düşük seviyeli bir Nodemailer transport nesnesini sarmalayın
createSendReputeTransport(existingTransport, options) mevcut bir taşıma nesnesini send, isteğe bağlı close ve verify metotlarıyla sarmalar; bir sendMail taşıyıcısı değildir. Çift analizi önlemek için createSendReputePlugin veya bunu seçin, ikisini birden seçmeyin. Her ikisi de client ve policy ile birlikte isteğe bağlı model, gönderici string/resolver, signal ve onDiagnostic parametrelerini alır. Diagnostic geri çağırmaları iletimi değiştiremez. SendReputeNodemailerError kodları geçersiz policy/message, desteklenmeyen içerik, spam engellemeleri ve API-failure engellemelerini ayırt eder. Yayınlanan npm 0.1.1 paketi ve web sitesi 0.1.1 indirmesi, görüntülenen tüm bellek içi text/plain ve text/html alternatiflerini tek bir sınırlı sınıflandırma isteğinde birleştirir; engelleme modunda desteklenmeyen görüntülenen alternatifleri reddederler. Ham mesajlar, akışlar, yollar ve URL'ler desteklenmemeye devam eder.
import { createSendReputeTransport } from "@sendrepute/node/nodemailer";
function wrapExistingTransport(existingTransport) {
return createSendReputeTransport(existingTransport, {
client,
policy: {
paidAnalysisConsent: true,
mode: "advisory",
spamProbabilityThreshold: 0.85,
onApiFailure: "block",
},
onDiagnostic(diagnostic) {
console.info(diagnostic.kind, diagnostic.action);
},
});
}
Tüm 49 müşteri API operasyonu
Tam SDK giriş türünü, dönüş türünü, kapsamı ve belgelenmiş HTTP durumlarını görmek için bir operasyonu genişletin. Şema bağlantısı, müşteri API referansındaki tüm parametreleri, yanıt alanlarını ve örnekleri açar. Bu sarmalayıcılar yukarıda yapılandırılan istemciyi kullanır; onay gereklidir ve hiçbir şey otomatik olarak yürütülmez. Okuma operasyonları satın alma yetkisi vermez. Mutasyonlar, ödemeler, erişim kapatma ve ücretli yapay zeka işlemleri için ilgili hesabın bilinçli eylemi gerekir.
Tek bir toplu kampanya analiz fiyat teklifi al
POST /v1/campaign-insights/quote
Gerekli kapsam: ai:generate
Giriş: { body: CustomerCampaignInsightsQuoteInput; }
Dönenler: CustomerCampaignInsightsQuote
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 429, 503
Parametreler, şemalar ve HTTP örnekleri
// The configured server-side client needs ai:generate scope.
// A quote is free; it does not authorize or start paid analysis.
const quote = await client.request("customerQuoteCampaignInsights", { body: {} });
// quote.priceMillicents: 10000 (USD 0.10) regular, 5000 (USD 0.05) active VIP.
// The quoted rate can change; obtain fresh consent before analysis.
Toplu kampanya teslimat metriklerini AI ile analiz et
POST /v1/campaign-insights/analyze
Gerekli kapsam: ai:generate
Giriş: { body: CustomerCampaignInsightsAnalyzeInput; }
Dönenler: CustomerCampaignInsightsAnalysis
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 409, 413, 429, 502, 503
Parametreler, şemalar ve HTTP örnekleri
import { randomUUID } from "node:crypto";
import type { CustomerCampaignInsightsMetrics } from "@sendrepute/node";
async function analyzeReviewedAggregate(
metrics: CustomerCampaignInsightsMetrics,
paidConsent: boolean,
) {
if (paidConsent !== true) throw new Error("Explicit price consent required");
// Aggregate counts/rates only: never include campaign IDs, contacts,
// message bodies or individual events. Requires ai:generate scope.
const quote = await client.request("customerQuoteCampaignInsights", { body: {} });
const body = {
analysisId: randomUUID(), // Persist this opaque ID and exact body for safe replay.
expectedPriceMillicents: quote.priceMillicents,
consent: true as const,
metrics,
};
// USD 0.10 regular or USD 0.05 active VIP; no automatic retry on a paid request.
// 409 PRICE_CHANGED requires a new quote and fresh consent, not blind retry.
// Aggregate input and result expire after 30 days.
return client.request("customerAnalyzeCampaignInsights", { body });
}
Müşteri API sınıflandırıcı modellerini listele
GET /v1/models
Gerekli kapsam: models:read
Giriş: Record<string, never>
Dönenler: CustomerApiModelsResponse
Belgelenmiş HTTP durumları: 200, 401, 403, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function getCustomerApiModels(
input: OperationInput<"getCustomerApiModels">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"getCustomerApiModels">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("getCustomerApiModels", input, { signal });
}
Müşteri API kullanımı ve limitlerini getir
GET /v1/usage
Gerekli kapsam: usage:read
Giriş: Record<string, never>
Dönenler: CustomerApiUsageResponse
Belgelenmiş HTTP durumları: 200, 401, 403, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function getCustomerApiUsage(
input: OperationInput<"getCustomerApiUsage">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"getCustomerApiUsage">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("getCustomerApiUsage", input, { signal });
}
Bir müşteri e-postasını sınıflandır
POST /v1/classify
Gerekli kapsam: classify
Giriş: { body: CustomerClassificationInput; }
Dönenler: CustomerClassificationResponse
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function classifyCustomerEmail(
input: OperationInput<"classifyCustomerEmail">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"classifyCustomerEmail">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("classifyCustomerEmail", input, { signal });
}
Mevcut hesabı ve bakiyeyi getir
GET /v1/account
Gerekli kapsam: account:read
Giriş: Record<string, never>
Dönenler: Account
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAccount(
input: OperationInput<"customerGetAccount">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAccount">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAccount", input, { signal });
}
Mevcut hesabın referans bağlantısını ve ödül etkinliğini getir
GET /v1/account/referrals
Gerekli kapsam: account:read
Giriş: { query?: { page?: number; pageSize?: number; }; }
Dönenler: ReferralDashboard
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAccountReferrals(
input: OperationInput<"customerGetAccountReferrals">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAccountReferrals">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAccountReferrals", input, { signal });
}
Mevcut hesap kredi defterini listele
GET /v1/account/ledger
Gerekli kapsam: billing:read
Giriş: { query?: { kind?: "usage" | "payments"; limit?: number; offset?: number; }; }
Dönenler: Array<CreditLedgerEntry>
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetCreditLedger(
input: OperationInput<"customerGetCreditLedger">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetCreditLedger">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetCreditLedger", input, { signal });
}
Mevcut hesap Bitcoin faturalarını listele
GET /v1/payments/invoices
Gerekli kapsam: billing:read
Giriş: { query?: { limit?: number; offset?: number; }; }
Dönenler: Array<BitcoinInvoice>
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListPaymentInvoices(
input: OperationInput<"customerListPaymentInvoices">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListPaymentInvoices">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListPaymentInvoices", input, { signal });
}
USD cinsinden bir Bitcoin para yatırma faturası oluştur
POST /v1/payments/invoices
Gerekli kapsam: billing:write
Giriş: { body: InvoiceInput; }
Dönenler: BitcoinInvoice
Belgelenmiş HTTP durumları: 201, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreatePaymentInvoice(
input: OperationInput<"customerCreatePaymentInvoice">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreatePaymentInvoice">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreatePaymentInvoice", input, { signal });
}
Ödenmemiş bir Bitcoin faturasını gizle
DELETE /v1/payments/invoices/{invoiceId}
Gerekli kapsam: billing:write
Giriş: { path: { invoiceId: string; }; }
Dönenler: undefined
Belgelenmiş HTTP durumları: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerDeletePaymentInvoice(
input: OperationInput<"customerDeletePaymentInvoice">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerDeletePaymentInvoice">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerDeletePaymentInvoice", input, { signal });
}
GET /payments/methods
GET /v1/payments/methods
Gerekli kapsam: billing:read
Giriş: Record<string, never>
Dönenler: Array<PaymentMethod>
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListPaymentMethods(
input: OperationInput<"customerListPaymentMethods">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListPaymentMethods">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListPaymentMethods", input, { signal });
}
Şu anki aktif Bitcoin yatırım bonusu teklifini getir
GET /v1/payments/deposit-offer
Gerekli kapsam: billing:read
Giriş: Record<string, never>
Dönenler: DepositBonusOffer | null
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetActiveDepositOffer(
input: OperationInput<"customerGetActiveDepositOffer">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetActiveDepositOffer">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetActiveDepositOffer", input, { signal });
}
Mevcut hesap faturaları için onayları yenile
POST /v1/payments/refresh
Gerekli kapsam: billing:write
Giriş: Record<string, never>
Dönenler: Array<BitcoinInvoice>
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerRefreshMyPayments(
input: OperationInput<"customerRefreshMyPayments">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerRefreshMyPayments">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerRefreshMyPayments", input, { signal });
}
Mevcut genel analiz ve düzenleme fiyatlarını getir
GET /v1/pricing
Gerekli kapsam: catalog:read
Giriş: Record<string, never>
Dönenler: PricingSettings
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetPricingSettings(
input: OperationInput<"customerGetPricingSettings">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetPricingSettings">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetPricingSettings", input, { signal });
}
Güncel genel VIP teklifini ve karşılaştırma fiyatlarını al
GET /v1/vip/plans
Gerekli kapsam: catalog:read
Giriş: Record<string, never>
Dönenler: VipPlanQuote
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipPlans(
input: OperationInput<"customerGetVipPlans">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipPlans">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipPlans", input, { signal });
}
GET /vip
GET /v1/vip
Gerekli kapsam: vip:read
Giriş: Record<string, never>
Dönenler: VipState
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVip(
input: OperationInput<"customerGetVip">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVip">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVip", input, { signal });
}
POST /vip/purchase
POST /v1/vip/purchase
Gerekli kapsam: vip:purchase
Giriş: { body: CustomerVipPurchaseInput; }
Dönenler: VipPurchaseResult
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerPurchaseVip(
input: OperationInput<"customerPurchaseVip">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerPurchaseVip">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerPurchaseVip", input, { signal });
}
Bir düzenleme için teklif al ve kayıtlı bir sınıflandırmaya göre tekrar kontrol et
POST /v1/rewrite/quote
Gerekli kapsam: rewrite
Giriş: { body: EditQuoteInput; }
Dönenler: EditQuote
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteClassificationEdit(
input: OperationInput<"customerQuoteClassificationEdit">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteClassificationEdit">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteClassificationEdit", input, { signal });
}
Bir düzenleme için teklif al ve kayıtlı bir sınıflandırmaya göre tekrar kontrol et
POST /v1/classify/edit/quote
Gerekli kapsam: classify
Giriş: { body: EditQuoteInput; }
Dönenler: EditQuote
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteManualClassificationEdit(
input: OperationInput<"customerQuoteManualClassificationEdit">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteManualClassificationEdit">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteManualClassificationEdit", input, { signal });
}
Gönderen adı, konu ve gövdeyi kullanarak bir e-postayı sınıflandır
POST /v1/classify/edit
Gerekli kapsam: classify
Giriş: { body: CustomerManualEditInput; }
Dönenler: CustomerManualEditResult
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerClassifyEmail(
input: OperationInput<"customerClassifyEmail">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerClassifyEmail">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerClassifyEmail", input, { signal });
}
Seçilen işaretli terimlerin ayrı bir ücret karşılığında yapay zeka ile yeniden yazılmasını ve sonucun yeniden sınıflandırılmasını talep edin
POST /v1/rewrite
Gerekli kapsam: rewrite
Giriş: { body: CustomerAiRewriteInput; }
Dönenler: AiRewriteResult
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerRewriteFlaggedTermsWithAi(
input: OperationInput<"customerRewriteFlaggedTermsWithAi">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerRewriteFlaggedTermsWithAi">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerRewriteFlaggedTermsWithAi", input, { signal });
}
Başka bir ödeme yapmadan, sahip olunan ücretli Tümünü Yeniden Yaz makbuzu üzerinden tam olarak oluşturulmuş bir son taslağı doğrula
POST /v1/rewrite/finalize
Gerekli kapsam: rewrite
Giriş: { body: { requestId: string; sender: string; subject: string; body: string; }; }
Dönenler: { requestId: string; input: RewrittenClassificationInput; classification: ClassificationResult; }
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerFinalizeAiRewrite(
input: OperationInput<"customerFinalizeAiRewrite">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerFinalizeAiRewrite">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerFinalizeAiRewrite", input, { signal });
}
Sahip olunan tamamlanmış ücretli yapay zeka yeniden yazma makbuzunu kurtar
GET /v1/rewrite/result/{requestId}
Gerekli kapsam: rewrite
Giriş: { path: { requestId: string; }; }
Dönenler: AiRewriteResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAiRewriteResult(
input: OperationInput<"customerGetAiRewriteResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAiRewriteResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAiRewriteResult", input, { signal });
}
Ayrıca ödenen bir yapay zeka yeniden yazımının izin verilen maksimum fiyatını teklif edin
POST /v1/rewrite/ai-quote
Gerekli kapsam: rewrite
Giriş: { body: AiRewriteQuoteInput; }
Dönenler: AiRewriteQuote
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteAiRewrite(
input: OperationInput<"customerQuoteAiRewrite">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteAiRewrite">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteAiRewrite", input, { signal });
}
Onaylanmış hesap fiyatı üzerinden yapay zeka ile düzenlenebilir standart bir MJML e-posta tasarımı oluşturun
POST /v1/email-builder/ai-template
Gerekli kapsam: ai:generate
Giriş: { body: CustomerAiEmailTemplateInput; }
Dönenler: AiEmailTemplateResult
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateAiEmailTemplate(
input: OperationInput<"customerCreateAiEmailTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateAiEmailTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateAiEmailTemplate", input, { signal });
}
Onaylanmış üye fiyatı üzerinden yapay zeka ile düzenlenebilir yerel bir VIP e-posta tasarımı oluşturun
POST /v1/vip/email-template
Gerekli kapsam: ai:generate
Giriş: { body: CustomerVipEmailTemplateInput; }
Dönenler: CustomerVipEmailTemplateResult
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateVipEmailTemplate(
input: OperationInput<"customerCreateVipEmailTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateVipEmailTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateVipEmailTemplate", input, { signal });
}
Ücretsiz bir standart e-posta tasarım düzenleyici oturumu aç
POST /v1/email-builder/access
Gerekli kapsam: builder:write
Giriş: { body: CustomerEmailBuilderAccessInput; }
Dönenler: EmailBuilderAccess
Belgelenmiş HTTP durumları: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerAccessEmailBuilder(
input: OperationInput<"customerAccessEmailBuilder">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerAccessEmailBuilder">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerAccessEmailBuilder", input, { signal });
}
GET /email-builder/access/{accessId}
GET /v1/email-builder/access/{accessId}
Gerekli kapsam: builder:read
Giriş: { query?: { designId?: string; }; path: { accessId: string; }; }
Dönenler: EmailBuilderActiveAccess
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetEmailBuilderAccess(
input: OperationInput<"customerGetEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetEmailBuilderAccess", input, { signal });
}
DELETE /email-builder/access/{accessId}
DELETE /v1/email-builder/access/{accessId}
Gerekli kapsam: builder:write
Giriş: { path: { accessId: string; }; }
Dönenler: undefined
Belgelenmiş HTTP durumları: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCloseEmailBuilderAccess(
input: OperationInput<"customerCloseEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCloseEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCloseEmailBuilderAccess", input, { signal });
}
POST /vip/email-builder/access
POST /v1/vip/email-builder/access
Gerekli kapsam: vip:builder
Giriş: { body: CustomerVipBuilderAccessInput; }
Dönenler: VipBuilderAccess
Belgelenmiş HTTP durumları: 201, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateVipEmailBuilderAccess(
input: OperationInput<"customerCreateVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateVipEmailBuilderAccess", input, { signal });
}
GET /vip/email-builder/access/{accessId}
GET /v1/vip/email-builder/access/{accessId}
Gerekli kapsam: builder:read
Giriş: { path: { accessId: string; }; }
Dönenler: VipBuilderAccess
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipEmailBuilderAccess(
input: OperationInput<"customerGetVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipEmailBuilderAccess", input, { signal });
}
DELETE /vip/email-builder/access/{accessId}
DELETE /v1/vip/email-builder/access/{accessId}
Gerekli kapsam: vip:builder
Giriş: { path: { accessId: string; }; }
Dönenler: undefined
Belgelenmiş HTTP durumları: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerDeleteVipEmailBuilderAccess(
input: OperationInput<"customerDeleteVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerDeleteVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerDeleteVipEmailBuilderAccess", input, { signal });
}
Read permanent paid-result evidence with the original account and credential
GET /customer/paid-results/{recoveryId}
Gerekli kapsam: authenticated original credential
Giriş: { path: { recoveryId: string; }; }
Dönenler: { status: "pending" | "succeeded" | "failed"; operation: "customerStandardAiGenerate" | "customerVipAiGenerate" | "customerVipBuilderAccess"; settlement: { kind: "paid_result" | "no_charge" | "confirmed_refund" | "unresolved"; accountId: string; credentialId: string | null; recoveryId: string; receiptId: string; chargeMillicents?: number; refundMillicents?: number; deletedAt?: string; }; result?: { [key: string]: unknown; }; error?: { [key: string]: unknown; }; }
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetPaidResult(
input: OperationInput<"customerGetPaidResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetPaidResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetPaidResult", input, { signal });
}
Read the authenticated account and credential identity before paid dispatch
GET /customer/paid-results/identity
Gerekli kapsam: authenticated credential
Giriş: Record<string, never>
Dönenler: { accountId: string; credentialId: string; }
Belgelenmiş HTTP durumları: 200, 401, 403, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerPaidResultIdentity(
input: OperationInput<"customerPaidResultIdentity">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerPaidResultIdentity">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerPaidResultIdentity", input, { signal });
}
Explicitly resolve an owned paid result with the original credential and service scope
POST /customer/paid-results/{recoveryId}/resolve
Gerekli kapsam: original ai:generate or vip:builder service scope
Giriş: { body: { action: "resolve"; reason: string; }; path: { recoveryId: string; }; }
Dönenler: { status: "pending" | "succeeded" | "failed"; operation: "customerStandardAiGenerate" | "customerVipAiGenerate" | "customerVipBuilderAccess"; settlement: { kind: "paid_result" | "no_charge" | "confirmed_refund" | "unresolved"; accountId: string; credentialId: string | null; recoveryId: string; receiptId: string; chargeMillicents?: number; refundMillicents?: number; deletedAt?: string; }; result?: { [key: string]: unknown; }; error?: { [key: string]: unknown; }; }
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerResolvePaidResult(
input: OperationInput<"customerResolvePaidResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerResolvePaidResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerResolvePaidResult", input, { signal });
}
Kaydetmeden veya göndermeden standart bir MJML tasarımını içe aktarın ve derleyin
POST /v1/email-builder/import
Gerekli kapsam: builder:write
Giriş: { body: CustomerStandardBuilderInput; }
Dönenler: CustomerStandardBuilderImportResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderImport(
input: OperationInput<"customerStandardBuilderImport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderImport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderImport", input, { signal });
}
Kaydetmeden veya göndermeden standart bir MJML tasarımını doğrulayın ve derleyin
POST /v1/email-builder/validate
Gerekli kapsam: builder:write
Giriş: { body: CustomerStandardBuilderInput; }
Dönenler: CustomerStandardBuilderValidateResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderValidate(
input: OperationInput<"customerStandardBuilderValidate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderValidate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderValidate", input, { signal });
}
Kaydetmeden veya göndermeden standart bir MJML tasarımını HTML'ye derleyin
POST /v1/email-builder/compile
Gerekli kapsam: builder:write
Giriş: { body: CustomerStandardBuilderInput; }
Dönenler: CustomerStandardBuilderCompileResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderCompile(
input: OperationInput<"customerStandardBuilderCompile">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderCompile">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderCompile", input, { signal });
}
Standart bir MJML tasarımını göndermeden HTML, MJML veya ZIP olarak dışa aktarın
POST /v1/email-builder/export
Gerekli kapsam: builder:write
Giriş: { body: CustomerStandardBuilderInput; }
Dönenler: CustomerStandardBuilderExportResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderExport(
input: OperationInput<"customerStandardBuilderExport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderExport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderExport", input, { signal });
}
Aktif üyeliği ve sahip olunan açık erişimi olan yerel bir VIP tasarımını içe aktarın ve derleyin
POST /v1/vip/email-builder/import
Gerekli kapsam: vip:builder
Giriş: { body: CustomerNativeBuilderInput; }
Dönenler: CustomerNativeBuilderImportResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderImport(
input: OperationInput<"customerNativeBuilderImport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderImport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderImport", input, { signal });
}
Aktif üyeliği ve sahip olunan açık erişimi olan yerel bir VIP tasarımını doğrulayın ve derleyin
POST /v1/vip/email-builder/validate
Gerekli kapsam: vip:builder
Giriş: { body: CustomerNativeBuilderInput; }
Dönenler: CustomerNativeBuilderValidateResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderValidate(
input: OperationInput<"customerNativeBuilderValidate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderValidate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderValidate", input, { signal });
}
Aktif üyelik ve sahip olunan açık erişim ile yerel bir VIP tasarımını HTML'e derleyin
POST /v1/vip/email-builder/compile
Gerekli kapsam: vip:builder
Giriş: { body: CustomerNativeBuilderInput; }
Dönenler: CustomerNativeBuilderCompileResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderCompile(
input: OperationInput<"customerNativeBuilderCompile">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderCompile">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderCompile", input, { signal });
}
Yerel bir VIP tasarımını, gönderim yapmadan HTML veya üç varyantlı bir HTML ZIP olarak dışa aktarın
POST /v1/vip/email-builder/export
Gerekli kapsam: vip:builder
Giriş: { body: CustomerNativeBuilderInput; }
Dönenler: CustomerNativeBuilderExportResult
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderExport(
input: OperationInput<"customerNativeBuilderExport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderExport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderExport", input, { signal });
}
Tek seferlik standart veya yetkili yerel VIP barındırılan düzenleyici devrini başlat
POST /v1/email-builder/hosted-handoffs
Gerekli kapsam: builder:write
Giriş: { body: CustomerHostedBuilderHandoffInput; }
Dönenler: CustomerHostedBuilderHandoff
Belgelenmiş HTTP durumları: 201, 400, 401, 403, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateHostedBuilderHandoff(
input: OperationInput<"customerCreateHostedBuilderHandoff">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateHostedBuilderHandoff">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateHostedBuilderHandoff", input, { signal });
}
Vip Düzenleyici Şablonlarını Listele
GET /v1/vip/email-builder/templates
Gerekli kapsam: vip:read
Giriş: Record<string, never>
Dönenler: CustomerVipTemplateCatalog
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListVipBuilderTemplates(
input: OperationInput<"customerListVipBuilderTemplates">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListVipBuilderTemplates">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListVipBuilderTemplates", input, { signal });
}
Vip Düzenleyici Şablonunu Getir
GET /v1/vip/email-builder/templates/{templateId}
Gerekli kapsam: vip:read
Giriş: { path: { templateId: string; }; }
Dönenler: CustomerVipTemplateDocument
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipBuilderTemplate(
input: OperationInput<"customerGetVipBuilderTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipBuilderTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipBuilderTemplate", input, { signal });
}
Standart Düzenleyici Şablonlarını Listele
GET /v1/email-builder/templates
Gerekli kapsam: catalog:read
Giriş: Record<string, never>
Dönenler: CustomerStandardTemplateCatalog
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListStandardBuilderTemplates(
input: OperationInput<"customerListStandardBuilderTemplates">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListStandardBuilderTemplates">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListStandardBuilderTemplates", input, { signal });
}
Standart Düzenleyici Şablonunu Getir
GET /v1/email-builder/templates/{templateId}
Gerekli kapsam: catalog:read
Giriş: { path: { templateId: string; }; }
Dönenler: CustomerStandardTemplateDetail
Belgelenmiş HTTP durumları: 200, 400, 401, 403, 404, 413, 429, 503
Parametreler, şemalar ve HTTP örnekleri
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetStandardBuilderTemplate(
input: OperationInput<"customerGetStandardBuilderTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetStandardBuilderTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetStandardBuilderTemplate", input, { signal });
}
Self-hosted n8n düğümü
0.1.0
Node.js 20.19+ ve n8n-workflow >=2.39.3 <3 sağlayan yamalı, kendi kendine barındırılan bir n8n kurulumu gerektirir. Uyumsuz eski bir ana bilgisayara zorla yüklemeyin. İndirilen tarball dosyasını custom-node dizininize yükleyin ve n8n uygulamasını yeniden başlatın. Yayınlanmamış bu düğüm n8n Cloud veya npm-name topluluk kurulumu aracılığıyla kullanılamaz.
Ücretli onay varsayılan olarak kapalıdır. Onaylanan her öğe, otomatik yeniden deneme olmaksızın bir sınıflandırma isteği gerçekleştirir. Sonuçlar sendrepute ad alanı altında yer alır. Göndermeden önce sendrepute.allowed üzerinde bir IF kapısı kullanın ve hata durumunu ayrıca kontrol edin. Tavsiye ve engelleme modları açık kararlar döndürür. Düğümün kendisi e-posta göndermez.
n8n tarball indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Kendi barındırdığınız n8n ana makinesinde çalıştırın, ardından normal süreç yöneticinizi kullanarak n8n servisini yeniden başlatın. SendRepute öğesinin düğüm seçicide göründüğünü onaylayın. Çıkartılan package/examples/classify-email.workflow.json dosyasını n8n editöründen içe aktarın. npm-name Topluluk düğümleri kurulumu ve n8n Cloud bu yayınlanmamış paket tarafından desteklenmez.
mkdir -p ~/.n8n/nodes
cd ~/.n8n/nodes
curl -fLO https://www.sendrepute.com/downloads/sendrepute-n8n.tgz
npm install ./sendrepute-n8n.tgz
tar -xzf sendrepute-n8n.tgz package/examples/classify-email.workflow.json
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/n8n-nodes-sendrepute.git
cd n8n-nodes-sendrepute
npm ci
npm run pack:check
npm pack --ignore-scripts
archive="$PWD/n8n-nodes-sendrepute-0.1.0.tgz"
mkdir -p ~/.n8n/nodes
cd ~/.n8n/nodes
npm install "$archive"
2. Güvenli şekilde yapılandırın
n8n kimlik bilgileri deposunda classify kapsamlı bir müşteri anahtarı ile bir SendRepute API kimlik bilgisi oluşturun. Bunu asla iş akışı JSON'una veya ifadelerine (expressions) yerleştirmeyin. Aşağıdaki JSON, içe aktarılabilir tam bir iş akışını değil, düğüm parametrelerini gösterir. Gönderen görünen adını, konuyu ve gövdeyi eşleyin; advisory/blocking, threshold ve open/closed hata politikasını seçin. paidConsent değerini true yapmadan önce fiyatlandırmayı gözden geçirin. Onaylanan her öğe en fazla bir istek gerçekleştirir.
{
"operation": "classify",
"paidConsent": false,
"sender": "={{ $json.sender }}",
"subject": "={{ $json.subject }}",
"body": "={{ $json.body }}",
"decisionMode": "blocking",
"threshold": 0.8,
"failurePolicy": "closed"
}
3. Bilinçli şekilde kullanın
SendRepute'tan hemen sonra bir IF düğümü yerleştirin ve bu boolean koşulunu kullanın. Yalnızca true çıktısını mevcut e-posta düğümünüze bağlayın; false çıktısını incelemeye yönlendirin veya durdurun. allowed değeri true olsa bile analysisStatus durumunu ayrı olarak inceleyin. Dahil edilen iş akışı, ücretli onay devre dışı olarak başlar ve hiçbir kimlik bilgisi içermez. SendRepute kendisi asla e-posta göndermez.
{{ $json.sendrepute.allowed === true }}
Sonuçlar, hatalar ve limitler
Başarılı sonuçlar, sendrepute ad alanını analysisStatus, decision, allowed, recommendation, doğrulanmış puan ve faturalandırma alanlarıyla değiştirir. Hatalar spam puanlarını atlar ve sanitize edilmiş failureCategory/errorCode döndürür. Kapalı hatalar engeller; açık hatalar izin verir ancak analysisStatus değerini failed olarak işaretler. Tavsiye niteliğindeki başarılar, recommendation değerinden bağımsız olarak her zaman izin verir. Consent-off durumu not_run döndürür. Yeniden deneme, recipients, attachments, rewrites, model selector veya özel uç noktalar (custom endpoints) yoktur. Güncellenmiş kaynak bağımlılığı denetimi sıfır bulgu bildirmiştir; bu anlık bir sonuçtur, bir güvenlik sertifikası değildir. Kendi kendine barındırılan çalışma zamanını yamalı tutun ve kurulumdan önce SECURITY.md dosyasını inceleyin.
Laravel entegrasyonu
0.1.0
PHP 8.2+ ve Laravel 12–13 sürümlerini hedefler. ZIP dosyasını yerel bir Composer yapıt deposu kullanarak yükleyin veya dosyaları çıkarıp ekteki README dosyasında açıklandığı gibi bir Composer yol deposu yapılandırın. Herhangi bir Packagist yayını beyan edilmemiştir.
Ücretli onay ve mail hook varsayılan olarak devre dışıdır. Etkinleştirildiğinde bile, her mesaj X-SendRepute-Classify: yes ile açıkça dahil olmalıdır. Üstbilgi, teslimattan önce kaldırılır. Danışmanlık ve engelleme modlarının bağımsız hata politikaları vardır; şifre sıfırlama ve işlemsel postalar, kasıtlı olarak dahil edilmedikçe dokunulmadan kalır.
Laravel ZIP indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Laravel uygulamanızın içinde çalıştırın. Bu komutlar indirmeyi çıkartır ve bir Composer yol deposu (path repository) kaydeder; bu bir Packagist kurulumu değildir. Paket keşfi sağlayıcıyı kaydeder ve vendor:publish config/sendrepute.php dosyasını oluşturur. Çıkartılan paket dizinini Composer için erişilebilir tutun. Artifact deposu, README'de belgelenen başka bir seçenektir.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-laravel.zip -o packages/sendrepute-laravel.zip
unzip packages/sendrepute-laravel.zip -d packages
composer config repositories.sendrepute path ./packages/sendrepute-laravel
composer require sendrepute/laravel:@dev
php artisan vendor:publish --tag=sendrepute-config
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
composer config repositories.sendrepute vcs https://github.com/sendrepute/sendrepute-laravel
composer require sendrepute/laravel:dev-main
php artisan vendor:publish --tag=sendrepute-config
2. Güvenli şekilde yapılandırın
SENDREPUTE_API_KEY değerini sunucu sırlarında saklayın. Temel URL /api ile biter; istemci /v1/classify ekler. Tam güvenilen ana makine (trusted-host) eşleşmesi ve doğrulanmış HTTPS gereklidir. Gösterilen her iki anahtar da siz fiyatlandırmayı inceleyip açıkça true olarak ayarlayana kadar kapalı kalır. config/sendrepute.php içinde mail.mode, mail.spam_probability_threshold ve mail.failure_policy seçeneklerini bağımsız olarak seçin. Varsayılan, hata durumunda izin veren advisory modudur.
SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
SENDREPUTE_TRUSTED_HOSTS=www.sendrepute.com
SENDREPUTE_PAID_ANALYSIS_CONSENT=false
SENDREPUTE_MAIL_ENABLED=false
3. Bilinçli şekilde kullanın
Kesin opt-in başlığını yalnızca kasıtlı olarak seçilmiş Mailable sınıflarına ekleyin, asla küresel bir mail geri çağırmasına (callback) eklemeyin. Otomatik kanca (hook) için hem küresel anahtarlar hem de mesaj başına başlık gereklidir. Başlık, teslimattan önce kaldırılır. Şifre sıfırlama ve kritik bildirimleri, açıkça test edilmediği sürece otomatik engellemenin dışında tutun. Manuel sınıflandırma, bunun yerine Classifier sözleşmesini (contract) çözümleyebilir ve gösterildiği gibi çağrı başına onay verebilir.
// Inside your deliberately opted-in Mailable:
public function headers(): \Illuminate\Mail\Mailables\Headers
{
return new \Illuminate\Mail\Mailables\Headers(text: [
'X-SendRepute-Classify' => 'yes',
]);
}
// Or classify manually inside an authenticated, explicitly confirmed action:
function classifyAfterConsent(bool $confirmed, string $subject, string $body): \SendRepute\Laravel\ClassificationResult
{
if (!$confirmed) {
throw new \RuntimeException('Paid consent required');
}
return app(\SendRepute\Laravel\Contracts\Classifier::class)->classify(
sender: 'Example Company',
subject: $subject,
body: $body,
paidAnalysisConsent: true,
);
}
API ve yöntem referansı
Classifier arayüzünü Laravel konteynerinden çözümleyin. classify(string sender, string subject, string body, ?string model = null, bool paidAnalysisConsent = false) yöntemi ClassificationResult döndürür. Genel alanları requestId, model, label, spamProbability, confidence, replayed ve chargedMillicents'tir. SendReputeException; temizlenmiş kategori, HTTP durumu, API kodu ve istek kimliğini sağlar. Otomatik kanca, MessageSending üzerindeki AnalyzeOutgoingMessage'dır ve güvenli tanılaması ClassificationOutcome'dur. Bu entegrasyon yalnızca sınıflandırmayı destekler; hesap yönetimi, ödemeler, builder'lar veya yapay zeka yeniden yazma işlemlerini desteklemez.
Sonuçlar, hatalar ve limitler
ClassificationResult doğrulanmış sonuç ve faturalandırma verilerini içerir. MessageSending kancası, engellenen bir mesajı iptal etmek için false döndürür; iptal bir SMTP hatası veya bir MessageSent olayı değildir. ClassificationOutcome yalnızca eylemi, puanı ve sanitize edilmiş hata meta verilerini raporlar, mesaj içeriğini asla raporlamaz. Hata politikası; hatalı biçimlendirilmiş girdi/yanıt, kimlik doğrulama, bakiye, oran sınırları ve iletim sorunlarını kapsar. Yeniden deneme veya kuyruk eklenmez. Belirlenmiş bir gönderen ve bellek içi text veya HTML gövdesi gereklidir.
Mautic taslak ön kontrolü
0.1.0
PHP 8.1+ ve ext-curl yüklü, tek web düğümlü Mautic 5.x kurulumlarını hedefler. Mautic 4, Mautic 6 ve çok düğümlü kümeler desteklenmez. SendReputeBundle dosyasını plugins dizininize çıkartın, eklentileri yeniden yükleyin ve ekteki README dosyasını izleyerek önbelleği temizleyin. Kimlik bilgilerini yapılandırın ve sunucu ortamında local-flock kilit modunu açıkça onaylayın.
Yalnızca kayıtlı bir taslağın yönetici tarafından başlatılan ücretli danışmanlık analizidir. Global onay, varlık erişim kontrolleri, CSRF doğrulaması ve tek kullanımlık onay her isteği korur. E-postaları göndermez, yeniden yazmaz veya engellemez ve gönderim anı yaptırımı yoktur. Alıcı değişimleri genişletilmeden kalır; önce düzenleyici değişikliklerini kaydedin.
Mautic ZIP indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Mautic kök dizininizden web uygulamasıyla aynı PHP kullanıcısı ve ortamıyla çalıştırın veya eklentileri yeniden yüklemeden önce dağıtım süreciniz aracılığıyla ZIP dosyasını çıkartın. Mautic 5.x, PHP 8.1+, ext-curl ve tek bir Linux/POSIX web düğümü gerektirir. Mautic 4/6 ve çok düğümlü kümeler desteklenmez; canlı yama tabanlı kurulum sertifikasyonu iddia edilmemektedir.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-mautic.zip
unzip sendrepute-mautic.zip -d plugins
php bin/console mautic:plugins:reload
php bin/console cache:clear
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
git clone https://github.com/sendrepute/sendrepute-mautic.git
cd sendrepute-mautic
python3 package.py
2. Güvenli şekilde yapılandırın
Gösterilen kalıcı defter dizinini web kök dizini dışında, 0700 moduyla PHP kullanıcısına ait olacak şekilde oluşturun. /tmp, geçici konteynerler, sembolik bağlantılar veya belirsiz ağ depolama alanları kullanmayın. SENDREPUTE_API_KEY değerini sunucu tarafında saklayın. local-flock değerini yalnızca tek bir web düğümü paylaşılan süreç kilitlemesi sağladığında onaylayın. Küresel ücretli analiz 0'da devre dışı kalır; fiyatlandırmayı ve sınırları inceledikten sonra 1'e ayarlayın. Hiçbir tarayıcı alanı kimlik bilgisini veya uç noktayı sağlayamaz.
SENDREPUTE_MAUTIC_PAID_ANALYSIS_ENABLED=0
SENDREPUTE_MAUTIC_ATOMIC_LOCK_MODE=local-flock
SENDREPUTE_MAUTIC_LEDGER_DIR=/var/lib/mautic/sendrepute-ledger
3. Bilinçli şekilde kullanın
Önce editör değişikliklerini kaydedin. Bu e-postaya erişimi olan gerçek bir Mautic yöneticisi olarak, kaydedilen taslağı açın ve SendRepute preflight seçeneğini seçin. Onayı inceleyin ve ücretli işlemi açıkça kabul edin. İstek, CSRF doğrulaması ve kaydedilen içeriğe bağlı on dakikalık, tek kullanımlık bir niyet gerektirir. Kalıcı kilitleme ve içerik barındırmayan defter, desteklenen tek düğüm üzerinde mükerrer eşzamanlı harcamayı önler.
Sonuçlar, hatalar ve limitler
Doğrulanmış olasılık, etiket, güven ve gerçek faturalandırılan tutarı veya makbuz tekrarını görüntüler. Başarısızlıklar spam kararı göstermez ve otomatik olarak yeniden denenmez. Yalnızca kaydedilen gönderen görünen adı, konu ve gövde analiz edilir; kişi yer tutucuları genişletilmeden kalır. Eklenti taslakları yeniden yazmaz, e-posta göndermez, kampanyaları engellemez veya bir gönderim zamanı politikası uygulamaz. Kaydedilmiş bir taslak incelemesi, alıcıya sunulan nihai mesajı onaylayamaz.
Python istemcisi ve Django backend
0.1.0
Python 3.9+ gerektirir. Kaynak ZIP dosyasını çıkarın ve dizinini pip ile kurun. Genel sunucu istemcisi standart kütüphaneyi kullanır; Django, açık e-posta backend'i için isteğe bağlı bir bağımlılıktır. Bu paket PyPI üzerinde yayınlanmamıştır.
Ücretli onay varsayılan olarak kapalıdır. Django sarmalayıcısı orijinal transport ve message nesnelerini korur. Ekleri değil; birincil gövde ile satır içi text/plain ve text/html alternatiflerini birleştiren tek bir sınırlı dizeyi analiz eder. Engelleme modu, desteklenmeyen veya aşırı büyük görüntülenen içeriği reddeder. Kimlik doğrulama hataları, izin politikası olsa bile varsayılan olarak engellenir; critical-mail davranışını bilinçli olarak seçin.
Python kaynak ZIP indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Sanal bir ortam kullanın. Genel istemci yalnızca standart kütüphane odaklıdır; son komut isteğe bağlı Django bağımlılığını ekler ve Flask, FastAPI veya diğer genel sunucu kullanımları için gereksizdir. Paket, PyPI'den değil, indirilen kaynak dizininden yüklenir. Python 3.9+ paket minimumudur; birlikte desteklenen Python/Django sürümlerini seçin.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-python.zip
unzip sendrepute-python.zip
python -m venv .venv
. .venv/bin/activate
python -m pip install ./sendrepute-python
python -m pip install './sendrepute-python[django]'
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
python -m pip install "sendrepute @ git+https://github.com/sendrepute/sendrepute-python.git@7d54935c4ae2db136800231136e4ea28d63118db"
python -m pip install "sendrepute[django] @ git+https://github.com/sendrepute/sendrepute-python.git@7d54935c4ae2db136800231136e4ea28d63118db"
2. Güvenli şekilde yapılandırın
SENDREPUTE_API_KEY bilgisini sunucu gizli anahtarları (secrets) aracılığıyla enjekte edin. Genel istemci varsayılan olarak kanonik barındırılan uç noktayı, doğrulanmış HTTPS'yi, yönlendirme içermemeyi ve yeniden deneme yapmamayı kullanır. İstemci onayı varsayılan olarak kapalıdır; örnek, yalnızca onay kontrolünden sonra çağrı başına onay verir. Uç nokta geçersiz kılmaları açık bir HTTPS orijin izin listesi gerektirir. Döndürülen sözlük, bir gönderim kararı değil, doğrulanmış sonuç ve faturalandırma verilerini içerir.
import os
from sendrepute import SendReputeClient, SendReputeError
client = SendReputeClient(api_key=os.environ["SENDREPUTE_API_KEY"])
def classify_after_consent(sender, subject, body, confirmed=False):
if confirmed is not True:
raise ValueError("Paid consent required")
try:
return client.classify(
sender=sender, subject=subject, body=body,
paid_analysis_consent=True,
)
except SendReputeError as error:
# Safe metadata only; do not log message content or response bodies.
print(error.code, error.status, error.request_id)
raise
Django e-posta arka ucu
Mevcut backend biriminizi SENDREPUTE_ORIGINAL_EMAIL_BACKEND içinde koruyun ve normal SMTP ayarlarını tutun. Örnek, ücretli onayı kapalı tutar; bunu yalnızca fiyatlandırma incelemesinden sonra True olarak ayarlayın. Tavsiye modu başarılı analizlere izin verir; engelleme SENDREPUTE_SPAM_THRESHOLD ile karşılaştırma yapar. Bağımsız hata politikasını bilinçli olarak seçin. Kimlik doğrulama hataları, izin verilmiş olsa bile varsayılan olarak engeller. Örnek, README varsayılanlarını takip eder ve kritik e-postalar için korumasız geçiş önerisi değildir.
# Django settings.py
import os
EMAIL_BACKEND = "sendrepute.django.SendReputeEmailBackend"
SENDREPUTE_ORIGINAL_EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
SENDREPUTE_API_KEY = os.environ["SENDREPUTE_API_KEY"]
SENDREPUTE_PAID_ANALYSIS_CONSENT = False
SENDREPUTE_POLICY_MODE = "advisory"
SENDREPUTE_SPAM_THRESHOLD = 0.90
SENDREPUTE_FAILURE_POLICY = "allow"
SENDREPUTE_ALLOW_AUTH_FAILURE = False
SENDREPUTE_TIMEOUT = 10
3. Bilinçli şekilde kullanın
Bu işlev yalnızca çağrıldığında gönderim yapar. Django sarmalayıcısı yapılandırıldığında ve ücretli onay etkinleştirildiğinde, orijinal backend orijinal mesaj nesnelerini değişmeden alır. Sınıflandırıcı, ana gövdeyi satır içi text/plain ve text/html alternatifleriyle birleştiren tek bir sınırlı dize alır; ekler ve alıcılar ayrı girdiler değildir. Çağırmadan önce şablonları işleyin. Önce yerel bir test backendi kullanın, ardından bilinçli olarak yapılandırılmış gerçek taşıma biriminizi kullanın.
from django.core.mail import EmailMultiAlternatives
def send_reviewed_message(recipient):
message = EmailMultiAlternatives(
subject="Your requested summary",
body="Here is the summary you requested.",
from_email="Example Team <team@example.com>",
to=[recipient],
)
message.attach_alternative(
"<p>Here is the summary you requested.</p>", "text/html"
)
return message.send()
API ve yöntem referansı
Genel kurucu, api_key dışındaki tüm parametrelerin anahtar kelimeyle iletildiği SendReputeClient(api_key, endpoint, allowed_origins, timeout, paid_analysis_consent) şeklindedir. timeout sıfırdan büyük ve en fazla 30 saniye olmalıdır. classify işlemi sender, subject ve body anahtar kelimelerini gerektirir; model ve her çağrı için paid_analysis_consent isteğe bağlıdır. Sender 1–320 karakter, subject 1–998 ve body 1–524,288 karakterdir ve ayrı bir kodlanmış istek sınırına sahiptir. Döndürülen sözlük requestId, model, result ve billing içerir; result alanı label, spamProbability, confidence, reasons ve isteğe bağlı contentAudit içerir. billing alanı chargedMillicents ve replayed içerir. Hatalar, tamamı SendReputeError altında olan ConsentRequiredError, AuthenticationError, BalanceError, RateLimitError, TransportError ve InvalidResponseError'u kapsar. Geçersiz yapılandırma ValueError hatasına yol açabilir. Django arka ucu open(), close() ve send_messages(email_messages) yöntemlerini sunarak orijinal arka ucun gönderilen sayısını döndürür; genel bir API, builder, rewrite veya ödeme yöntemi eklemez.
Sonuçlar, hatalar ve limitler
Engelleme, yalnızca daha güvenli bir alt kümeyi analiz etmek yerine, desteklenmeyen veya aşırı büyük görüntülenen içeriği reddeder. Kimlik doğrulama hataları, izin vermek için ayrı bir açık geçersiz kılma gerektirir. Diğer hatalar seçilen izin ver/engelle politikasını izler; fail_silently engellenen hataların yükseltilip yükseltilmeyeceğini veya atlanıp atlanmayacağını kontrol eder. Sarmalayıcı kuyruğa almaz, yeniden denemez, taşıma birimlerini değiştirmez, ekleri incelemez veya şablonları işlemez. Genel istemci, kod/durum/request_id içeren temizlenmiş SendReputeError alt sınıflarını yükseltir; mesaj gövdelerini günlüğe kaydetmeyin.
Go sınıflandırma istemcisi
0.1.0
Go 1.22+ gerektirir. Sadece standart kütüphane kullanan istemci, e-posta taşımasını değil, sınıflandırmayı destekler. Yerel bir modül değişimi içeren indirilebilir kaynak ZIP dosyasını veya kaynak alternatifinin altında gösterilen doğrulanmış genel modül kurulumunu seçin.
Yalnızca standart kütüphane kullanan, açık ücretli onaylı, sınırlı istekli, doğrulanmış HTTPS'li, reddedilen yönlendirmeli ve yeniden denemesiz sunucu tarafı sınıflandırma. E-posta göndermez veya gönderim/engelleme kararları vermez. Uygulamanız, özellikle kritik işlemsel postalar için eşikleri ve hata davranışını kasıtlı olarak seçmelidir.
Go kaynak ZIP indir
Genel kaynak deposu
Tam README ve örnekler
Güvenlik notları ve bilinen sınırlamalar
1. Yükleyin
Kaynağı mevcut Go uygulamanızın dizinine çıkarın ve modül komutlarını orada çalıştırın. Yerel değiştirme, indirilen modüle işaret eder; proje düzeniniz farklıysa bu yolu taşıyın veya ayarlayın. Yalnızca yeni bir uygulama oluştururken go mod init komutunu önce kendi modül adınızla çalıştırın. Bu istemci için harici çalışma zamanı modülü gerekmez.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-go.zip
unzip sendrepute-go.zip
# Run inside your existing application's module:
go mod edit -require=github.com/sendrepute/sendrepute-go@v0.0.0
go mod edit -replace=github.com/sendrepute/sendrepute-go=./sendrepute-go-v0.1.0
go mod tidy
Alternatif: Herkese açık kaynaktan yükleyin
Yukarıdaki web sitesi indirme talimatları yerine bu kaynak yolunu kullanın. Depodaki README dosyası geri kalan etkinleştirme ve yapılandırma adımlarını açıklar; yalnızca bir ZIP oluşturmak bir eklenti yüklemez. Python için ikinci komut isteğe bağlı Django desteği ekler. Kimlik bilgilerini sunucu gizli anahtarlarında (secrets) tutun ve ücretli özellikleri etkinleştirmeden önce güvenlik notlarını inceleyin. Yalnızca Node, npm üzerindedir; herkese açık bir GitHub deposu WordPress.org, n8n Cloud, Packagist veya PyPI yayını anlamına gelmez.
go get github.com/sendrepute/sendrepute-go@bfd656f829618348232da506225a5d92587d48e2
2. Güvenli şekilde yapılandırın
SENDREPUTE_API_KEY bilgisini sunucu gizli anahtarlarından enjekte edin. Gösterilen işlev, confirmed=true ile çağrılana kadar hiçbir işlem yapmaz; bu çağrı ücretli bir sınıflandırmaya neden olabilir. On saniyelik bir bağlam ayarlar ve kanonik HTTPS uç noktasını kullanır. İstemci onayı varsayılan olarak kapalıdır; son true argümanı bu tek istek için onay verir. Bir uç nokta geçersiz kılması açık bir AllowedOrigins girişi gerektirir; yönlendirmeler reddedilir.
package integration
import (
"context"
"errors"
"os"
"time"
sendrepute "github.com/sendrepute/sendrepute-go"
)
func Analyze(subject, body string, confirmed bool) error {
if !confirmed {
return errors.New("paid consent required")
}
client, err := sendrepute.NewClient(sendrepute.Config{
APIKey: os.Getenv("SENDREPUTE_API_KEY"),
})
if err != nil {
return err
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
result, err := client.Classify(ctx, sendrepute.ClassificationInput{
Sender: "Example Team", Subject: subject, Body: body,
}, true)
if err != nil {
return err
}
if result.Result.SpamProbability >= 0.90 {
return errors.New("review required")
}
return nil
}
3. Bilinçli şekilde kullanın
Analyze işlevini kimliği doğrulanmış uygulamanızdan yalnızca fiyatlandırma incelemesi ve açık onaydan sonra çağırın. 0.90 eşiği ve inceleme hatası SDK varsayılanları değil, örnek uygulama politikasıdır. Herhangi bir gönderim kodunu bağlamadan önce hataların erteleme, izin verme veya kapalı başarısızlık anlamına gelip gelmeyeceğine karar verin. İstemci, Result.SpamProbability ve faturalandırma alanlarını içeren türü belirlenmiş bir sonuç döndürür; hiçbir zaman e-posta göndermez veya teslimat kararını kendisi vermez.
API ve yöntem referansı
NewClient(Config) fonksiyonu (*Client, error) döndürür. Config; APIKey, Endpoint, AllowedOrigins, Timeout ve PaidAnalysisConsent kabul eder. Classify(ctx, ClassificationInput, consent) fonksiyonu (*ClassificationResponse, error) döndürür. Giriş alanları Sender, Subject, Body ve isteğe bağlı Model'dir. Sender 1–320 rün, subject 1–998 rün ve body en fazla 524,288 UTF-8 bayttır. Türü belirlenmiş yanıt RequestID, Model, Result ve Billing içerir; Billing alanı ChargedMillicents ve Replayed değerlerini sunar. Result; Label, SpamProbability, Confidence, Reasons, FlaggedTerms ve isteğe bağlı ContentAudit içerir. *Error yapısını güvenle incelemek için errors.As kullanın; yapılandırma ve API hataları spam puanı değil, hata olarak kalır. Hesap, ödeme, builder veya rewrite yöntemleri mevcut değildir.
Sonuçlar, hatalar ve limitler
Bir çağrı, yeniden deneme olmaksızın en fazla bir ücretli HTTP girişimi yapar. Hatalar güvenli bir kategoriyi, kısıtlı kod/request ID bilgisini ve durumu gösterir; kimlik bilgilerini, gövdeleri veya ağ ayrıntılarını asla ifşa etmez. Bağlam süresi, istek ve yanıt boyutları sınırlıdır; hatalı biçimlendirilmiş yanıtlar puanlara dönüştürülmek yerine reddedilir. İstemcinin MIME ayrıştırma, işleme, alıcılar, ekler, kuyruk, oluşturucu, yeniden yazma veya SMTP yetenekleri yoktur. Modeli yalnızca gerekiyorsa açıkça seçin; aksi takdirde hesap varsayılanı geçerli olur.
listmonk HTTP Messenger
0.1.0
listmonk 6.2.0'nin Custom HTTP Messenger arayüzünü hedefleyen, Node.js 20+ için yayınlanmamış yerel kaynaklı bir pakettir. Bu harici hizmet, sınıflandırma sonrasındaki alt akış SMTP iletiminin sahibidir; işlem içi bir eklenti veya bir SMTP preflight proxy değildir. Doğrulama, kurulu bir listmonk dağıtımı veya gerçek bir SMTP sağlayıcısı testi değil, izole ve çevrimdışı bir işlemdir.
Her iki ücretli anahtar varsayılan olarak kapalıdır. Messenger tam olarak işlenmiş tek bir gövde kabul eder, ekleri reddeder, taze fiyatlandırmayı kontrol eder ve katı Gelen Kutusu sonucunu şart koşar: label inbox, spam probability en fazla 0.12 ve sıfır flagged terms. Ardından, incelenen aynı gövdeyi yapılandırılmış SMTP bağlantısı üzerinden oluşturur ve gönderir. Dayanıklı makbuzlar; engellenen, başarısız, devam eden veya belirsiz sonuçlardan sonra otomatik tekrarları önler.
Yayınlanmamış listmonk kaynak ZIP dosyasını indir
1. Yükleyin
Bu yayımlanmamış web sitesi kaynak ZIP dosyasını ayrılmış messenger sunucusuna çıkarın. README.md ve SECURITY.md dosyalarını inceleyin, örnek ortamı kopyalayın ve yapılandırmadan önce sunucu giriş noktasını sözdizimi kontrolünden geçirin. İndirilebilir izinli yapı yapıtı, depo test paketini kasıtlı olarak hariç tutar. Üçüncü taraf çalışma zamanı paketi bulunmamaktadır. Bu bir listmonk pazaryeri veya süreç içi kurulum değildir.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-listmonk.zip
unzip sendrepute-listmonk.zip
cd sendrepute-listmonk
cp config.example.env .env
node --check src/server.mjs
2. Güvenli şekilde yapılandırın
Özel bir ayrıcalıksız hesap ve 0700 modunda dayanıklı bir yerel durum dizini kullanın. Fiyatlandırma ve atomik olmayan fiyat sınırlaması kabul edilene kadar gösterilen üç güvenlik anahtarını da false tutun. SendRepute, messenger Basic Auth ve alt akış SMTP kimlik bilgilerini yalnızca sunucu sırlarında (secrets) saklayın. HTTPS'yi güvenilir bir ters proxy'de sonlandırın.
SENDREPUTE_ENABLED=false
SENDREPUTE_PAID_CONSENT=false
SENDREPUTE_ALLOW_NONATOMIC_PRICE_CONFIRMATION=false
SENDREPUTE_CONFIRMED_MAX_PRICE_MILLICENTS=
STATE_DIRECTORY=/var/lib/sendrepute-listmonk
SMTP_HOST=smtp.example.com
SMTP_PORT=465
SMTP_SECURE=true
3. Bilinçli şekilde kullanın
Sadece POST /v1/listmonk yolunu HTTPS ve özel bir Basic Auth arkasında dışa aktarın. listmonk Settings > Messengers kısmında, bu URL'yi bir Custom HTTP Messenger olarak ekleyin, sıfır deneme seçin ve yalnızca denetlenmesi ve iletilmesi gereken kampanyalar için bunu seçin. Aynı zamanda listmonk SMTP seçmeyin: bu servis, alt akıştaki SMTP gönderimini kendisi gerçekleştirir.
Custom HTTP Messenger URL: https://messenger.example.com/v1/listmonk
Authentication: dedicated Basic Auth username and password
Retries: 0
Select this messenger only. Do not also select SMTP for the campaign.
Sonuçlar, hatalar ve limitler
İletilmiş bir kopya, başka bir sınıflandırma veya gönderim yapmadan başarı döndürür. Her engellenmiş, başarısız, denetlenen, gönderilen veya belirsiz makbuz başka bir gönderimi reddeder. Belirsiz bir SMTP sonucundan sonra, sağlayıcı günlüklerini ve listmonk bağlamını manuel olarak uzlaştırın; asla sadece bir denemeyi zorlamak için bir makbuzu silmeyin. Mevcut fiyatlandırma kontrolü günceldir ancak sınıflandırma hiçbir expectedPriceMillicents alanını kabul etmediği için atomik değildir.
Mailcoach Self-Hosted adapter
0.1.0
Laravel 12 üzerindeki Mailcoach Self-Hosted v10 sürümünü hedefleyen, yayınlanmamış yerel bir Composer paketi. Lisanslı spatie/laravel-mailcoach v10 çekirdeği bu çalışma alanında mevcut değildir, bu nedenle bu paket yüklü bir Mailcoach v10 uçtan uca testi iddiasında bulunmaz. Gerçek Laravel 12 Mailer testleri belgelenmiş iptal edilebilir MessageSending event akışını kapsar; bir lisans sahibi, prodüksiyon öncesinde her bir tam Mailcoach gönderim yolunu doğrulamalıdır.
enabled, paid-consent ve güncel fiyatlandırma onayı anahtarlarının tümü varsayılan olarak kapalıdır. Etkinleştirildiğinde kanca, yalnızca Mailcoach adlandırılmış rotalarına değil, o Laravel mailer üzerindeki her mesaja uygulanır. Halihazırda işlenmiş Symfony Email alternatiflerini analiz eder ve iletimi iptal edebilir. Fail-closed varsayılan ayardır; analiz hatalarına izin vermek ayrı bir bilinçli ilkedir.
Deneysel Mailcoach kaynak ZIP dosyasını indir
1. Yükleyin
İndirilen yayınlanmamış ZIP dosyasını, lisanslı Mailcoach uygulaması tarafından erişilebilen özel bir Composer artifact dizinine yerleştirin. Bu yerel artifact deposunu kaydedin, 0.1 satırını gerektirin, tüketen lockfile'ı commit edin ve isteğe bağlı olarak yapılandırmayı yayınlayın. Bu bir Packagist kurulumu değildir. Lisans sahibi, tam Mailcoach Self-Hosted v10 sürümüne karşı doğrulama yapmalıdır.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-mailcoach.zip -o packages/sendrepute-mailcoach.zip
composer config repositories.sendrepute artifact packages
composer require sendrepute/mailcoach:^0.1
php artisan vendor:publish --tag=sendrepute-mailcoach-config
2. Güvenli şekilde yapılandırın
Başlangıçta üç anahtarı da false olarak tutun. API anahtarını sunucu gizli değerlerinde (secrets) saklayın ve hesap tarafında bir harcama limiti yapılandırın. Mevcut classify işlemi atomik bir expectedPriceMillicents korumasına sahip değildir, bu nedenle üçüncü anahtar sabit bir fiyat teklifi vaat etmek yerine mevcut API fiyatlandırmasını açıkça kabul eder. Eşik değerini ve allow/block hata politikasını bağımsız olarak yapılandırın.
SENDREPUTE_MAILCOACH_ENABLED=false
SENDREPUTE_MAILCOACH_PAID_CONSENT=false
SENDREPUTE_MAILCOACH_ACCEPT_CURRENT_API_PRICING=false
SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
3. Bilinçli şekilde kullanın
Paket keşfi, bir Laravel MessageSending dinleyicisi kaydeder. Uygulama kodunda kampanya başına bir çağrı yoktur: Özel bir Mailcoach kurulumunda kasten etkinleştirildiğinde, iletimden hemen önce o Laravel mailer üzerinden gönderilen her Symfony Email nesnesini denetler. Karma bir Laravel uygulamasında, ana uygulama postaları da kapsama dahildir.
Sonuçlar, hatalar ve limitler
Adaptör; gönderen görünen adını, konusunu ve her bir boş olmayan bellek içi text/plain veya text/html alternatifini gönderirken; alıcıları, adresleri, ekleri, zarf verilerini ve raw MIME içeriğini hariç tutar. Eksik veya desteklenmeyen içerik, hatalı biçimlendirilmiş yanıtlar ve API hataları varsayılan olarak engelleme yapar. Çevrimdışı çekirdek testleri gerçek Laravel Mailer iptalini uygular ancak lisanslı Mailcoach kampanya, otomasyon, işlemsel ve test mesajı rotaları doğrulanmamış olarak kalır.
Brevo kontrollü gönderim akışı
0.1.0
Brevo'nun işlemsel POST /v3/smtp/email operasyonu etrafında açık bir sunucu tarafı gönderme API'si uygulayan yayınlanmamış yerel bir Node.js 20+ kaynak paketi. Brevo panosu üzerinden gönderilenleri, kampanyaları, otomasyonları, SMTP relay hizmetini veya diğer SDK'lar üzerinden yapılan çağrıları kesmez. Testler kontrollü ve çevrimdışıdır; canlı bir Brevo hesabını onaylamaz.
paidConsent varsayılan olarak kapalıdır. Sadece sabit satır içi metin ve HTML mesajları kabul edilir; uzak şablonlar, parametreler, planlanmış gönderimler, mesaj versiyonları ve URL tabanlı içerikler reddedilir. Denetlenmiş tam ve değişmez snapshot, Brevo'ya gönderilir. Dayanıklı bir sendKey defteri yinelenen ve belirsiz denemeleri engeller ve kesinleşmemiş sağlayıcı sonuçları operatör mutabakatı gerektirir.
Yayınlanmamış Brevo kaynak ZIP dosyasını indir
1. Yükleyin
Yayımlanmamış kaynak ZIP dosyasını bir sunucu uygulamasına çıkarın, README ve güvenlik notlarını inceleyin ve src/index.mjs dosyasını sözdizimi kontrolünden geçirin. İndirilebilir izinli yapı yapıtı, depo test paketini kasıtlı olarak hariç tutar. SendReputeBrevo öğesini src/index.mjs içerisinden içe aktarın; bu bir npm veya Brevo pazaryeri kurulumu değildir. Node.js 20+ gereklidir ve çalışma zamanı bağımlılığı yoktur.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-brevo.zip
unzip sendrepute-brevo.zip
cd sendrepute-brevo
node --check src/index.mjs
2. Güvenli şekilde yapılandırın
Güncel fiyatlandırma ve atomik olmayan fiyat sınırlaması kabul edilene kadar paidConsent değerini false olarak tutun. Her iki API anahtarını sunucu gizli değerlerinde (secrets) tutun ve dayanıklı tek ana bilgisayarlı depolama biriminde özel bir kalıcı kayıt defteri dizini kullanın. expectedPriceMillicents değeri yeni çekilen maksimum değere eşit olmalıdır, ancak classify borçlandırması henüz bu değeri atomik olarak zorlayamaz.
const integration = new SendReputeBrevo({
sendreputeApiKey: process.env.SENDREPUTE_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY,
paidConsent: false,
expectedPriceMillicents: approvedMaximum,
ledgerDirectory: "/var/lib/my-app/sendrepute-brevo",
});
3. Bilinçli şekilde kullanın
send işlevini yalnızca hem sınıflandırma hem de teslimat yapması gereken kontrollü sunucu yolundan çağırın. Aynı amaçlanan e-postanın her denemesi için bir adet sabit sendKey kullanın. Sabit satır içi içerik sağlayın; Brevo şablon kimlikleri, değişken parametreler, zamanlama veya mesaj sürümleri sağlamayın. Başka yerlerden yapılan gönderimler bu sarmalayıcıyı tamamen atlar.
await integration.send({
sendKey: durableBusinessEventId,
message: {
sender: { name: "Example Shop", email: "orders@example.com" },
to: [{ email: recipient }],
subject,
textContent,
htmlContent,
},
});
Sonuçlar, hatalar ve limitler
Eşik dahilindeki bir Inbox sonucu, aynı değişmez snapshot için bir Brevo transactional API isteğine izin verir. Sağlayıcı gönderiminden önce kayıt defteri delivery-unknown olarak değişir. Zaman aşımları, bağlantı kesilmeleri, hatalı başarı yanıtları, çökmeler ve sağlayıcı reddetmeleri asla otomatik olarak yeniden denenmez; herhangi bir manuel karardan önce bunları Brevo kayıtlarıyla uzlaştırın.
BigMailer kontrollü gönderim akışı
0.1.0
BigMailer işlemsel API çağrıları için yayınlanmamış yerel bir Node.js 24+ sarmalayıcısıdır. BigMailer içine yüklenmez veya panel ve ilgisiz API gönderimlerine müdahale etmez. BigMailer, uzaktan düzenlenebilir kampanya içeriklerine sahip olduğu için sarmalayıcı, inceleme ve teslimat arasında kampanyanın arayan tarafından sağlanan render snapshot ile aynı kaldığını kanıtlayamaz.
enabled, paidConsent ve uzak şablon sınırlaması kabulünün tümü varsayılan olarak kapalıdır. Arayan taraf eksiksiz bir oluşturma kopyası sağlamalı ve özetini çıkarmalı, eşleşen uzak kampanyayı operasyonel olarak dondurmalı ve kalıcı bir deliveryKey sunmalıdır. Fiyatlandırma sınıflandırmadan önce yeniden kontrol edilir, ancak mevcut sınıflandırma API'sinin atomik beklenen fiyat alanı yoktur. Çift, engellenmiş, reddedilmiş ve belirsiz teslimat durumları asla otomatik olarak yeniden gönderilmez.
Deneysel BigMailer kaynak ZIP dosyasını indir
1. Yükleyin
Bu yayımlanmamış kaynak ZIP dosyasını kontrollü Node.js 24+ sunucu uygulamasına çıkarın ve README.md ile SECURITY.md dosyalarını inceleyin. Sarmalayıcıyı ve dosya teslimat deposunu (file delivery store) doğrudan src dizininden içe aktarın. Bu bir npm veya BigMailer pazaryeri kurulumu değildir ve herhangi bir üçüncü taraf çalışma zamanı bağımlılığı yoktur.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-bigmailer.zip
unzip sendrepute-bigmailer.zip
cd sendrepute-bigmailer
node --check src/index.mjs
node --check src/file-delivery-store.mjs
2. Güvenli şekilde yapılandırın
İnceleme tamamlanana kadar enabled, paidConsent ve remoteTemplateSnapshotLimitationAcknowledged seçeneklerini false olarak tutun. API anahtarlarını, marka ve kampanya UUID değerlerini yalnızca sunucu tarafında saklayın. FileDeliveryStore bileşenini özel dayanıklı depolama alanına yerleştirin. Güncel classify API'sinin bunu atomik olarak kilitleyemeyeceğini anlayarak, yeni incelenmiş fiyatlandırmayı expectedPricing alanına kopyalayın.
const integration = createBigMailerIntegration({
enabled: false,
paidConsent: false,
remoteTemplateSnapshotLimitationAcknowledged: false,
sendReputeApiKey: process.env.SENDREPUTE_API_KEY,
bigMailerApiKey: process.env.BIGMAILER_API_KEY,
brandId,
campaignId,
expectedPricing,
deliveryStore: new FileDeliveryStore("/var/lib/my-app/bigmailer-deliveries.json"),
});
3. Bilinçli şekilde kullanın
Kontrollü her API gönderimi için bir adet sabit deliveryKey, görüntülenen tüm text/plain ve text/html alternatiflerini, tam işleme anlık görüntüsünü (render snapshot) ve snapshotDigest(snapshot) değerini sağlayın. Uzak şablon (remote-template) sınırlamasını yalnızca operasyonel bir kontrol, bu anlık görüntüyle eşleşen BigMailer kampanya revizyonunu dondurduğunda onaylayın. Panel üzerinden yapılan gönderimler ve ilgisiz API gönderimleri bu sarmalayıcıyı atlar.
await integration.send({
deliveryKey: durableBusinessEventId,
snapshot,
snapshotSha256: snapshotDigest(snapshot),
email: recipient,
variables,
});
Sonuçlar, hatalar ve limitler
Dosya deposu (file store), sınıflandırmadan önce teslimat anahtarını (delivery key) rezerve eder. Çakışan, mükerrer, engellenen, reddedilen ve belirsiz teslimat sonuçları otomatik olarak tekrar gönderilemez. BigMailer'ın send uç noktası, denetlenen gövde yerine birleştirme verilerini kabul eder; bu nedenle başarılı sınıflandırma, değişken uzak kampanya içeriğinin hâlâ eşleştiğinin kanıtı değildir; tam eşleşme gerektiğinde başka bir sağlayıcı kullanın.
Gizlilik ve ücretli işlemler
Analiz; gönderen görünen adını, konuyu ve mesaj gövdesini SendRepute servisine gönderir. Alıcılar ve ekler ayrı olarak iletilmez, ancak gövdeye dahil edilen içerik iletilir. Kimlik bilgilerini gizli tutun ve istek/gövde günlüğüne kaydetmeyi (logging) devre dışı bırakın. Gelen kutusuna düşme veya teslimat garantisi verilmez.
Sınıflandırma ücretlidir. Onay vermeden önce güncel fiyatlandırmayı ve hesap harcama limitlerinizi okuyun. Özdeş bir hesap/içerik/model isteği, 24 saat içinde bir makbuzu yeniden oynatabilir; değiştirilen içerik veya model yeni bir ücrete tabi olabilir. Yeniden denemenin ücretsiz olduğunu varsaymayın. Yapay zeka ile yeniden yazma, ücretli gönderimden önce seçilen ana makbuz, mod ve koşullar için bir maksimum ücret teklifi gerektirir; devam eden bir makbuzu sorgulayın ve tamamlanan sonuçları başka bir istek başlatmak yerine orijinal istek kimliği (request ID) ile geri alın. Hepsini Yeniden Yaz (Rewrite All), başka bir borçlandırma olmaksızın tam olarak bir nihai işlenmiş taslağı doğrulayabilir. Yapay zeka şablon oluşturma ve yerel VIP erişimi ayrı olarak fiyatlandırılır; standart oluşturucu (builder) işlemi ücretsizdir. Hiçbir analiz, yeniden yazma veya oluşturucu sonucu; iletim, gelen kutusuna yerleşim veya uyumluluk garantisi vermez.
Çevrimdışı doğrulama, her framework, eklenti veya transport sürümünün sertifikasyonu değildir. Birlikte verilen kurulum ve güvenlik talimatlarını okuyun, ücretli analizleri kasıtlı olarak yapılandırılana kadar devre dışı bırakın ve kritik postalar için etkinleştirmeden önce seçtiğiniz hata politikasını test edin.
Fiyatlandırmayı inceleyin
Müşteri API referansı
Entegrasyon desteği isteyin