2

ストアのオーナーにメールで送信されるフォームがあります。特別なことは何もありません。入力フィールドと選択フィールドの束だけです。

これをメールに添付されるCSVファイルに変換しようとしています。

私のコントローラーには、次のものがあります。

    public function postAction() {
    $post = $this->getRequest()->getPost();
    if ($post) {
        #Mage::log($post,null,'tmp.log');

        #not using this at the moment...
        $postObject = new Varien_Object();
        $postObject->setData($post);


        $file = fopen('temp/temp.csv','w+');

        foreach($post as $sections) {
            fputcsv($file, $sections);
        };

        fclose($file);

        $mailTemplate = Mage::getModel('core/email_template')->loadDefault('training_email_template');
        $mailTemplate->setSenderName('Joe Schmoe');
        $mailTemplate->setSenderEmail('eat@joes.com');
        $mailTemplate->setTemplateSubject('Form Submission');
        $attachment = $mailTemplate->getMail()->createAttachment($file);
        $attachment->filename = 'file.csv';

        $mailTemplate->send(
            'store@owner.com',
            Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER),
            $post
        );
    }
}

これでファイル自体が作成されたので、temp.csvを問題なく開くことができ、想定どおりに表示されます。ただし、添付されているファイルが空であるか、(他のいくつかのことを試したときに)エンコーディングがすべて不安定になります...明らかに適切な形式ではありません。

ここで簡単なものが欠けているような気がします...誰かアドバイスがありますか?

4

1 に答える 1

5

にパラメータとしてファイルリソースを送信していますcreateAttachment()。文字列である必要があります。これを試して:

$mailTemplate->getMail()->createAttachment(
    file_get_contents('temp/temp.csv'),
    Zend_Mime::TYPE_OCTETSTREAM,
    Zend_Mime::DISPOSITION_ATTACHMENT,
    Zend_Mime::ENCODING_BASE64,
    'file.csv'
);

Zend_Mailのドキュメントは次のとおりです

/**  
 * Creates a Zend_Mime_Part attachment
 *
 * Attachment is automatically added to the mail object after creation. The
 * attachment object is returned to allow for further manipulation.
 *
 * @param  string         $body
 * @param  string         $mimeType
 * @param  string         $disposition
 * @param  string         $encoding
 * @param  string         $filename OPTIONAL A filename for the attachment
 * @return Zend_Mime_Part Newly created Zend_Mime_Part object (to allow
 * advanced settings)
 */
public function createAttachment($body,
                                 $mimeType    = Zend_Mime::TYPE_OCTETSTREAM,
                                 $disposition = Zend_Mime::DISPOSITION_ATTACHMENT,
                                 $encoding    = Zend_Mime::ENCODING_BASE64,
                                 $filename    = null)
于 2012-05-31T16:42:03.807 に答える