Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

.docx attachment not working in custom contact form


Go to End


6 Posts   4714 Views

Avatar
lozhowlett

Community Member, 151 Posts

2 December 2011 at 11:37pm

Hi everyone,

I am trying to make a CV upload tool...

function UploadCV() {
            // Create fields          
            $fields = new FieldSet(
                new TextField('Name', 'Name'),
                new EmailField('Email', 'Email'),
                new TextField('Telephone','Telephone / Mobile'),
                new FileField('CVUpload', 'CV Attachment')
            
            );

            // Create action
            $actions = new FieldSet(
                new FormAction('SendContactForm', 'UPLOAD & SEND')
            );

            // Create Validators
            $validator = new RequiredFields('Name', 'Email', 'Telephone');

            return new Form($this, 'UploadCV', $fields, $actions, $validator);
        }
        
        function SendContactForm($data, $form) {
   
            //Set data
            $From = $data['Email'];
            $To = "lawrence@newedge.co.uk";
            $Subject = "CV Upload Submission";     
            $email = new Email($From, $To, $Subject);
            //set template
            $email->setTemplate('CvUpload');
            //populate template
            $email->populateTemplate($data);
            //attach upload
            if (isset($_FILES["CVUpload"]) && is_uploaded_file($_FILES["CVUpload"]["tmp_name"])) {
                $email->attachFile($_FILES["CVUpload"]["tmp_name"], $_FILES["CVUpload"]["name"]);
            }
            //send mail
            $email->send();
            //return to submitted message
            Director::redirect($this->Link("?success=1"));
        }

        public function Success()
        {
            return isset($_REQUEST['success']) && $_REQUEST['success'] == "1";
        }

However when I select a .docx file I get this error....


[Notice] Undefined index: docx
POST /candidates/UploadCV

Line 451 in /var/sites/s/seimansears.co.uk/public_html/sapphire/email/Mailer.php

Source

442 }
443 
444 /*
445  * Get mime type based on extension
446  */
447 function getMimeType($filename) {
448 	global $global_mimetypes;
449 	if(!$global_mimetypes) loadMimeTypes();
450 	$ext = strtolower(substr($filename,strrpos($filename,'.')+1));
451 	return $global_mimetypes[$ext];
452 }
453 
454 /*
455  * Load the mime-type data from the system file
456  */
457 function loadMimeTypes() {
Trace

getMimeType(ecommerce questions.docx) 
Line 389 of Mailer.php
encodeFileForEmail(Array) 
Line 116 of Mailer.php
htmlEmail(lawrence@newedge.co.uk,lawrence@newedge.co.uk,CV Upload Submission,<html> <body> <p>The following message was submitted to your site by <a href="mailto:lawrence@newedge.co.uk">lawrence howlett:</a></p> <p>Name: lawrence howlett</P> <p>Email: lawrence@newedge.co.uk</P> <p>Telephone / Mobile: 448707606812</P> </body> </html>,Array,Array,,) 
Line 31 of Mailer.php
Mailer->sendHTML(lawrence@newedge.co.uk,lawrence@newedge.co.uk,CV Upload Submission,<html> <body> <p>The following message was submitted to your site by <a href="mailto:lawrence@newedge.co.uk">lawrence howlett:</a></p> <p>Name: lawrence howlett</P> <p>Email: lawrence@newedge.co.uk</P> <p>Telephone / Mobile: 448707606812</P> </body> </html>,Array,Array,) 
Line 486 of Email.php
Email->send() 
Line 111 of Page.php
Page_Controller->SendContactForm(Array,Form,SS_HTTPRequest) 
Line 329 of Form.php
Form->httpSubmission(SS_HTTPRequest) 
Line 143 of RequestHandler.php
RequestHandler->handleRequest(SS_HTTPRequest) 
Line 161 of RequestHandler.php
RequestHandler->handleRequest(SS_HTTPRequest) 
Line 147 of Controller.php
Controller->handleRequest(SS_HTTPRequest) 
Line 199 of ContentController.php
ContentController->handleRequest(SS_HTTPRequest) 
Line 67 of ModelAsController.php
ModelAsController->handleRequest(SS_HTTPRequest) 
Line 282 of Director.php
Director::handleRequest(SS_HTTPRequest,Session) 
Line 125 of Director.php
Director::direct(/candidates/UploadCV) 
Line 127 of main.php

I have done some searching around and cant find any answers... does anyone know how to fix this issue?

Thanks!

Avatar
lozhowlett

Community Member, 151 Posts

2 December 2011 at 11:38pm

Ps, it works fine with .doc, .pdf, .jpg. Thanks,

Avatar
swaiba

Forum Moderator, 1899 Posts

2 December 2011 at 11:48pm

that is because when using attachFile you are not specficy the 3rd argument of the mime type and silverstripe doesn't have access to an entry for docx

$ext = //get file extenstion
if ($ext == 'docx') {
	$filetype = 'application/msword';
}
else {
	$filetype = HTTP::getMimeType($filename);
}
$email->attachFile($filename,$filename, $filetype);

Avatar
willmorgan

Community Member, 11 Posts

14 December 2011 at 12:37am

Edited: 14/12/2011 12:37am

Actually the true source of the problem, that can be fixed without any hacks to the core, is by updating your /etc/mime.types file.

If you open that you'll probably see:

application/msword                     doc

You just need to add docx next to doc, like so:

application/msword                     doc docx

Then restart Apache.

Avatar
lozhowlett

Community Member, 151 Posts

24 September 2012 at 8:10pm

HI everyone

A few months later and I am now getting this error for PDFs??

I have tried


if ($ext == 'docx') { 
                           $filetype = 'application/msword'; 
                        } 
                        else if ($ext == 'pdf') {
                            $filetype = 'application/pdf'; 
                        } else { 
                           $filetype = HTTP::getMimeType($_FILES["CVAttchment"]["tmp_name"]); 
                        } 

But its not working?

Notice] Undefined index: pdf
POST /job-details/ContactForm

Line 451 in /var/sites/p/pytec.co.uk/public_html/sapphire/email/Mailer.php

Trace

getMimeType(TF_logo.pdf)
Line 389 of Mailer.php
encodeFileForEmail(Array)
Line 116 of Mailer.php

Avatar
lozhowlett

Community Member, 151 Posts

24 October 2012 at 8:22pm

*bump