Hallo liebe OXID-Gemeinde,
ich habe mir eben ein Modul erstellt, dass folgendes macht:
- Alle Mails, die von dem System verschickt werden, gehen auch an mich in BCC.
- Die Datei AGB.pdf wird im Anhang mitgeschickt.
Habe dabei ein Problemchen, dass zwar die Funktion nicht beeinträchtigt, aber dennoch komisch ist und mehr Code zur Lösung benötigt. Dazu aber gleich, erstmal zeige ich kurz, wie ich es gemacht habe.
Folgende Datei erstellt: /modules/mail/myemail.php (und auch über Admin aktiviert).
<?php
class myEmail extends oxEmail
{
protected $bccMailAddress = ">>>Mailadresse<<<";
/* Every Mail BCC to ">>>Mailadresse<<<" */
public function send()
{
// if no recipients found, skipping sending
if ( count( $this->getRecipient() ) < 1 ) {
return false;
}
// BOF BCC to me
$this->setBcc( $bccMailAddress , 'Shop_BCC' );
// EOF BCC to me
$myConfig = $this->getConfig();
$this->setCharSet();
if ( $this->_getUseInlineImages() ) {
$this->_includeImages( $myConfig->getImageDir(), $myConfig->getNoSSLImageDir( isAdmin() ), $myConfig->getDynImageDir(),
$myConfig->getAbsImageDir(), $myConfig->getAbsDynImageDir());
}
$this->_makeOutputProcessing();
// try to send mail via SMTP
if ( $this->getMailer() == 'smtp' ) {
$blRet = $this->_sendMail();
// if sending failed, try to send via mail()
if ( !$blRet ) {
$this->setMailer( 'mail' );
$blRet = $this->_sendMail();
}
} else {
// sending mail via mail()
$this->setMailer( 'mail' );
$blRet = $this->_sendMail();
}
if ( !$blRet ) {
// failed sending, giving up, trying to send notification to shop owner
$this->_sendMailErrorMsg();
}
return $blRet;
}
/* My EDIT: AGB per PDF with the order mail*/
public function sendOrderEmailToUser( $oOrder, $sSubject = null )
{
$myConfig = $this->getConfig();
// add user defined stuff if there is any
$oOrder = $this->_addUserInfoOrderEMail( $oOrder );
//set mail params (from, fromName, smtp)
$oShop = $this->_getShop();
$this->_setMailParams( $oShop );
// P
// setting some deprecated variables
$oOrder->oDelSet = $oOrder->getDelSet();
$oUser = $oOrder->getOrderUser();
// create messages
$oSmarty = $this->_getSmarty();
$oSmarty->assign( "charset", oxLang::getInstance()->translateString("charset"));
$oSmarty->assign( "order", $oOrder);
$oSmarty->assign( "shop", $oShop );
$oSmarty->assign( "oViewConf", $oShop );
$oSmarty->assign( "oView", $myConfig->getActiveView() );
$oSmarty->assign( "user", $oUser );
$oSmarty->assign( "currency", $myConfig->getActShopCurrencyObject() );
$oSmarty->assign( "basket", $oOrder->getBasket() );
$oSmarty->assign( "payment", $oOrder->getPayment() );
if ( $oUser ) {
$oSmarty->assign( "reviewuserhash", $oUser->getReviewUserHash( $oUser->getId() ) );
}
$oSmarty->assign( "paymentinfo", $myConfig->getActiveShop() );
//deprecated vars
$oSmarty->assign( "iswishlist", true );
$oSmarty->assign( "isreview", true );
if ( $aVoucherList = $oOrder->getVoucherList() ) {
$oSmarty->assign( "vouchers", $aVoucherList );
}
$oOutputProcessor = oxNew( "oxoutput" );
$aNewSmartyArray = $oOutputProcessor->processViewArray( $oSmarty->get_template_vars(), "oxemail" );
foreach ( $aNewSmartyArray as $key => $val ) {
$oSmarty->assign( $key, $val );
}
$this->setBody( $oSmarty->fetch( $this->_sOrderUserTemplate ) );
$this->setAltBody( $oSmarty->fetch( $this->_sOrderUserPlainTemplate ) );
// #586A
if ( $sSubject === null ) {
if ( $oSmarty->template_exists( $this->_sOrderUserSubjectTemplate) ) {
$sSubject = $oSmarty->fetch( $this->_sOrderUserSubjectTemplate );
} else {
$sSubject = $oShop->oxshops__oxordersubject->getRawValue()." (#".$oOrder->oxorder__oxordernr->value.")";
}
}
$this->setSubject( $sSubject );
$sFullName = $oUser->oxuser__oxfname->getRawValue() . " " . $oUser->oxuser__oxlname->getRawValue();
$this->setRecipient( $oUser->oxuser__oxusername->value, $sFullName );
$this->setReplyTo( $oShop->oxshops__oxorderemail->value, $oShop->oxshops__oxname->getRawValue() );
/* BOF My ADD: AGB per PDF */
$attachment_path=$myConfig->getLanguageDir(false);
parent::addAttachment( $attachment_path , 'AGB.pdf' );
/* EOF My ADD */
$blSuccess = $this->send();
return $blSuccess;
}
public function setBcc( $sEmail = null, $sName = null )
{
if ( !oxUtils::getInstance()->isValidEmail( $sEmail ) ) {
$sEmail = ">>>Mailadresse<<<";
}
try {
parent::AddBCC( $sEmail, $sName );
} catch( Exception $oEx ) {
}
}
}
Alles funzt soweit (Für mich besondere Freude, da es das erste Modul ist, dass ich auf die Beine gekriegt habe…)
Was mich aber stutzig macht ist folgendes:
Die Adresse für den BCC-Versand möchte ich der Funktion “setBcc” mit der Variable $bccMailAddress übergeben. Diese ist auch am Anfang der Datei definiert und wird in der Funktion “send” wie folgt übergeben:
$this->setBcc( $bccMailAddress , 'Shop_BCC' );
Wenn ich aber in der Funktion “setBcc” folgende if-Abfrage nicht hätte, wo die Mailadresse explizit übergeben wird, also nicht über die Funktionsvariable $sEmail, bekomme ich in dem Fall, wo die Funktion auf gerufen wird die Standardseite “Shop offline”.
if ( !oxUtils::getInstance()->isValidEmail( $sEmail ) ) {
$sEmail = ">>>Mailadresse<<<";
}
Dh. ich schaffe es nicht, die Variable $bccMailAddress irgendwie zu übergeben. Es funktioniert nur, wenn ich in der Funktion “setBcc” die Variable $sEmail nochmal explizit überschreibe…
Kann einer von Euch einen Fehler erkennen? Würde mich über Tipps freuen… sonst, wenn jemand noch Fragen hat, einfach schreiben…